Fix quoting of iCal property parameter values according to RFC 5545

Conflicts:
	plugins/libcalendaring/lib/Sabre/VObject/Parameter.php
This commit is contained in:
Thomas Bruederli 2014-06-03 11:27:25 +02:00
parent 708658043b
commit cbe184364c
3 changed files with 12 additions and 10 deletions

View file

@ -72,21 +72,19 @@ class Parameter extends Node {
$src = array(
'\\',
"\n",
';',
',',
);
$out = array(
'\\\\',
'\n',
'\;',
'\,',
);
$value = str_replace($src, $out, $this->value);
if (strpos($value,":")!==false) {
$value = '"' . $value . '"';
// quote parameters according to RFC 5545, Section 3.2
$quotes = '';
if (preg_match('/[:;,]/', $this->value)) {
$quotes = '"';
}
return $this->name . '=' . $value;
return $this->name . '=' . $quotes . str_replace($src, $out, $this->value) . $quotes;
}

View file

@ -263,6 +263,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");
}
/**

View file

@ -9,9 +9,9 @@ ORGANIZER;CN="Organizor":MAILTO:organizor@example.org
DTSTAMP:20140225T160532Z
ATTENDEE;CN="Master of Desaster";RSVP=TRUE;PARTSTAT=NEEDS-ACTION;
ROLE=REQ-PARTICIPANT;X-UID=100156408:mailto:master@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@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@kolab.org
CREATED:20140225T160335Z
LAST-MODIFIED:20140225T160335Z