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