Branch 'roundcubemail-plugins-kolab-3.1' - plugins/libcalendaring
Thomas Brüderli
bruederli at kolabsys.com
Tue Jun 3 11:27:35 CEST 2014
plugins/libcalendaring/lib/Sabre/VObject/Parameter.php | 12 +++++++-----
plugins/libcalendaring/tests/libvcalendar.php | 4 ++++
plugins/libcalendaring/tests/resources/escaped.ics | 4 ++--
3 files changed, 13 insertions(+), 7 deletions(-)
New commits:
commit 97d86be953246ffb2618a71966f63c0da1dcd70b
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Tue Jun 3 11:27:25 2014 +0200
Fix quoting of iCal property parameter values according to RFC 5545
diff --git a/plugins/libcalendaring/lib/Sabre/VObject/Parameter.php b/plugins/libcalendaring/lib/Sabre/VObject/Parameter.php
index 37c9fd0..8744517 100644
--- a/plugins/libcalendaring/lib/Sabre/VObject/Parameter.php
+++ b/plugins/libcalendaring/lib/Sabre/VObject/Parameter.php
@@ -72,17 +72,19 @@ class Parameter extends Node {
$src = array(
'\\',
"\n",
- ';',
- ',',
);
$out = array(
'\\\\',
'\n',
- '\;',
- '\,',
);
- return $this->name . '=' . str_replace($src, $out, $this->value);
+ // quote parameters according to RFC 5545, Section 3.2
+ $quotes = '';
+ if (preg_match('/[:;,]/', $this->value)) {
+ $quotes = '"';
+ }
+
+ return $this->name . '=' . $quotes . str_replace($src, $out, $this->value) . $quotes;
}
diff --git a/plugins/libcalendaring/tests/libvcalendar.php b/plugins/libcalendaring/tests/libvcalendar.php
index f0fe704..ddc6e97 100644
--- a/plugins/libcalendaring/tests/libvcalendar.php
+++ b/plugins/libcalendaring/tests/libvcalendar.php
@@ -259,6 +259,10 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase
$this->assertEquals("House, Street, Zip Place", $event['location'], "Decode escaped commas in location value");
$this->assertEquals("Me, meets Them\nThem, meet Me", $event['description'], "Decode description value");
+ $this->assertEquals("Kolab, Thomas", $event['attendees'][3]['name'], "Unescaped");
+
+ $ics = $ical->export($events);
+ $this->assertContains('ATTENDEE;CN="Kolab, Thomas";PARTSTAT=', $ics, "Quoted attendee parameters");
}
/**
diff --git a/plugins/libcalendaring/tests/resources/escaped.ics b/plugins/libcalendaring/tests/resources/escaped.ics
index eb39a07..013c29b 100644
--- a/plugins/libcalendaring/tests/resources/escaped.ics
+++ b/plugins/libcalendaring/tests/resources/escaped.ics
@@ -9,9 +9,9 @@ ORGANIZER;CN="Organizor":MAILTO:organizor at example.org
DTSTAMP:20140225T160532Z
ATTENDEE;CN="Master of Desaster";RSVP=TRUE;PARTSTAT=NEEDS-ACTION;
ROLE=REQ-PARTICIPANT;X-UID=100156408:mailto:master at desaster.com
-ATTENDEE;CN="John Doe";RSVP=TRUE;PARTSTAT=NEEDS-ACTION;
+ATTENDEE;CN="Doe, John";RSVP=TRUE;PARTSTAT=NEEDS-ACTION;
ROLE=REQ-PARTICIPANT;X-UID=115484392:mailto:doe at example.com
-ATTENDEE;CN="Thomas Kolab";RSVP=TRUE;PARTSTAT=NEEDS-ACTION;
+ATTENDEE;CN="Kolab\, Thomas";RSVP=TRUE;PARTSTAT=NEEDS-ACTION;
ROLE=REQ-PARTICIPANT;X-UID=115936264:mailto:thomas at kolab.org
CREATED:20140225T160335Z
LAST-MODIFIED:20140225T160335Z
More information about the commits
mailing list