diff --git a/inc/caldav-PUT-functions.php b/inc/caldav-PUT-functions.php
index d4c5025e..16a03315 100644
--- a/inc/caldav-PUT-functions.php
+++ b/inc/caldav-PUT-functions.php
@@ -648,8 +648,8 @@ EOSQL;
$dav_data_params = $base_params;
$dav_data_params[':user_no'] = $user_no;
- // We don't allow a '/' in the UID to appear in the path, but anything else is fair game.
- $dav_data_params[':dav_name'] = sprintf( '%s%s.ics', $path, str_replace('/','',$uid) );
+ // We don't allow any of &?\/@%+: in the UID to appear in the path, but anything else is fair game.
+ $dav_data_params[':dav_name'] = sprintf( '%s%s.ics', $path, preg_replace('{[&?\\/@%+:]}','',$uid) );
$dav_data_params[':etag'] = md5($icalendar);
$calitem_params = $dav_data_params;
$dav_data_params[':dav_data'] = $icalendar;
diff --git a/testing/tests/regression-suite/0962-REPORT-expanded.result b/testing/tests/regression-suite/0962-REPORT-expanded.result
index e8401225..7d3efa6a 100644
--- a/testing/tests/regression-suite/0962-REPORT-expanded.result
+++ b/testing/tests/regression-suite/0962-REPORT-expanded.result
@@ -2,14 +2,14 @@ HTTP/1.1 207 Multi-Status
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, calendar-proxy, bind, addressbook, calendar-auto-schedule
-ETag: "a538e222b914a4030381e360ac974a27"
-Content-Length: 2463
+ETag: "6049c2ed7383e7a84ccf7f019f8e07f5"
+Content-Length: 2460
Content-Type: text/xml; charset="utf-8"
- /caldav.php/user5/home/naltpirh2vfjfmplmsivuo30t8%40google.com.ics
+ /caldav.php/user5/home/naltpirh2vfjfmplmsivuo30t8google.com.ics
BEGIN:VCALENDAR
@@ -92,12 +92,12 @@ END:VCALENDAR
- dav_name: >/user5/home/naltpirh2vfjfmplmsivuo30t8@google.com.ics<
+ dav_name: >/user5/home/naltpirh2vfjfmplmsivuo30t8google.com.ics<
dtstart: >2010-08-16 15:00:00+12<
dtstart_utc: >2010-08-16 03:00:00<
rrule: >FREQ=MONTHLY;WKST=MO;BYDAY=3SU<
- dav_name: >/user5/home/v3f2otajsto18em4rom3jd4238@google.com.ics<
+ dav_name: >/user5/home/v3f2otajsto18em4rom3jd4238google.com.ics<
dtstart: >2009-07-08 12:00:00+12<
dtstart_utc: >2009-07-08 00:00:00<
rrule: >FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO<
diff --git a/testing/tests/regression-suite/0963-POST-freebusy-private.result b/testing/tests/regression-suite/0963-POST-freebusy-private.result
index 26d6d07c..98ebdc75 100644
--- a/testing/tests/regression-suite/0963-POST-freebusy-private.result
+++ b/testing/tests/regression-suite/0963-POST-freebusy-private.result
@@ -57,7 +57,7 @@ END:VCALENDAR
start: >20060101T220000Z<
class: >PRIVATE<
- dav_name: >/user1/anotherone/20060803T084628Z-6040-1000-1-6@lamb.ics<
+ dav_name: >/user1/anotherone/20060803T084628Z-6040-1000-1-6lamb.ics<
finish: >20060802T003456Z<
rrule: >FREQ=YEARLY;INTERVAL=1<
start: >20060801T003456Z<
diff --git a/testing/tests/regression-suite/0964-REPORT-calquery-private.result b/testing/tests/regression-suite/0964-REPORT-calquery-private.result
index 8a06a132..4a7c0664 100644
--- a/testing/tests/regression-suite/0964-REPORT-calquery-private.result
+++ b/testing/tests/regression-suite/0964-REPORT-calquery-private.result
@@ -2,14 +2,14 @@ HTTP/1.1 207 Multi-Status
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
DAV: extended-mkcol, calendar-proxy, bind, addressbook
-ETag: "38a9a5f68b0d1510588fb3456181b129"
-Content-Length: 1037
+ETag: "cdb4786ea5b91bf38b8f332da104965d"
+Content-Length: 1034
Content-Type: text/xml; charset="utf-8"
- /caldav.php/user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543%40AKEXBE02.telecom.tcnz.net.ics
+ /caldav.php/user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543AKEXBE02.telecom.tcnz.net.ics
"621885941033781f3462950c9bc2844b"
@@ -39,7 +39,7 @@ END:VCALENDAR
class: >PUBLIC<
- dav_name: >/user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net.ics<
+ dav_name: >/user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543AKEXBE02.telecom.tcnz.net.ics<
finish: >20070119T203000Z<
rrule: >NULL<
start: >20070119T203000Z<
@@ -47,7 +47,7 @@ END:VCALENDAR
tz_id: >NULL<
class: >PRIVATE<
- dav_name: >/user1/anotherone/20060803T084628Z-6040-1000-1-6@lamb.ics<
+ dav_name: >/user1/anotherone/20060803T084628Z-6040-1000-1-6lamb.ics<
finish: >20060802T003456Z<
rrule: >FREQ=YEARLY;INTERVAL=1<
start: >20060801T003456Z<