mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-09-23 06:39:18 +00:00
Fail more gracefully on crap encoding input.
This commit is contained in:
parent
5b921b3884
commit
ce77dae043
@ -114,28 +114,60 @@ class CalDAVRequest
|
|||||||
$this->options = $options;
|
$this->options = $options;
|
||||||
if ( !isset($this->options['allow_by_email']) ) $this->options['allow_by_email'] = false;
|
if ( !isset($this->options['allow_by_email']) ) $this->options['allow_by_email'] = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Our path is /<script name>/<user name>/<user controlled> if it ends in
|
||||||
|
* a trailing '/' then it is referring to a DAV 'collection' but otherwise
|
||||||
|
* it is referring to a DAV data item.
|
||||||
|
*
|
||||||
|
* Permissions are controlled as follows:
|
||||||
|
* 1. if there is no <user name> component, the request has read privileges
|
||||||
|
* 2. if the requester is an admin, the request has read/write priviliges
|
||||||
|
* 3. if there is a <user name> component which matches the logged on user
|
||||||
|
* then the request has read/write privileges
|
||||||
|
* 4. otherwise we query the defined relationships between users and use
|
||||||
|
* the minimum privileges returned from that analysis.
|
||||||
|
*/
|
||||||
|
$this->path = (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : "/");
|
||||||
|
$this->path = rawurldecode($this->path);
|
||||||
|
|
||||||
|
/** Allow a request for .../calendar.ics to translate into the calendar URL */
|
||||||
|
if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $this->path, $matches ) ) {
|
||||||
|
$this->path = $matches[1]. '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
// dbg_error_log( "caldav", "Sanitising path '%s'", $this->path );
|
||||||
|
$bad_chars_regex = '/[\\^\\[\\(\\\\]/';
|
||||||
|
if ( preg_match( $bad_chars_regex, $this->path ) ) {
|
||||||
|
$this->DoResponse( 400, translate("The calendar path contains illegal characters.") );
|
||||||
|
}
|
||||||
|
if ( strstr($this->path,'//') ) $this->path = preg_replace( '#//+#', '/', $this->path);
|
||||||
|
|
||||||
if ( !isset($c->raw_post) ) $c->raw_post = file_get_contents( 'php://input');
|
if ( !isset($c->raw_post) ) $c->raw_post = file_get_contents( 'php://input');
|
||||||
if ( isset($_SERVER['HTTP_CONTENT_ENCODING']) ) {
|
if ( isset($_SERVER['HTTP_CONTENT_ENCODING']) ) {
|
||||||
@dbg_error_log('caldav', 'Content-Encoding: %s', $_SERVER['HTTP_CONTENT_ENCODING'] );
|
$encoding = $_SERVER['HTTP_CONTENT_ENCODING'];
|
||||||
switch( $_SERVER['HTTP_CONTENT_ENCODING'] ) {
|
@dbg_error_log('caldav', 'Content-Encoding: %s', $encoding );
|
||||||
|
$encoding = preg_replace('{[^a-z0-9-]}i','',$encoding);
|
||||||
|
if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || isset($c->dbg['caldav'])) ) {
|
||||||
|
$fh = fopen('/tmp/encoded_data.'.$encoding,'w');
|
||||||
|
if ( $fh ) {
|
||||||
|
fwrite($fh,$c->raw_post);
|
||||||
|
fclose($fh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch( $encoding ) {
|
||||||
case 'gzip':
|
case 'gzip':
|
||||||
$this->raw_post = gzdecode($c->raw_post);
|
$this->raw_post = @gzdecode($c->raw_post);
|
||||||
break;
|
break;
|
||||||
case 'deflate':
|
case 'deflate':
|
||||||
$this->raw_post = gzinflate($c->raw_post);
|
$this->raw_post = @gzinflate($c->raw_post);
|
||||||
break;
|
break;
|
||||||
case 'compress':
|
case 'compress':
|
||||||
$this->raw_post = gzuncompress($c->raw_post);
|
$this->raw_post = @gzuncompress($c->raw_post);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || isset($c->dbg['caldav'])) ) {
|
}
|
||||||
$fh = fopen('/tmp/raw_post','w');
|
if ( empty($this->raw_post) && !empty($c->raw_post) ) {
|
||||||
if ( $fh ) {
|
$this->PreconditionFailed(415, 'content-encoding', sprintf('Unable to decode "%s" content encoding.', $_SERVER['HTTP_CONTENT_ENCODING']));
|
||||||
fwrite($fh,$request->raw_post);
|
|
||||||
fclose($fh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->PreconditionFailed(402, 'content-encoding', 'This server does not presently support content encoded with "%s"', $_SERVER['HTTP_CONTENT_ENCODING']);
|
|
||||||
}
|
}
|
||||||
$c->raw_post = $this->raw_post;
|
$c->raw_post = $this->raw_post;
|
||||||
}
|
}
|
||||||
@ -244,34 +276,6 @@ class CalDAVRequest
|
|||||||
if ( ! isset($this->timeout) || $this->timeout == 0 ) $this->timeout = (isset($c->default_lock_timeout) ? $c->default_lock_timeout : 900);
|
if ( ! isset($this->timeout) || $this->timeout == 0 ) $this->timeout = (isset($c->default_lock_timeout) ? $c->default_lock_timeout : 900);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Our path is /<script name>/<user name>/<user controlled> if it ends in
|
|
||||||
* a trailing '/' then it is referring to a DAV 'collection' but otherwise
|
|
||||||
* it is referring to a DAV data item.
|
|
||||||
*
|
|
||||||
* Permissions are controlled as follows:
|
|
||||||
* 1. if there is no <user name> component, the request has read privileges
|
|
||||||
* 2. if the requester is an admin, the request has read/write priviliges
|
|
||||||
* 3. if there is a <user name> component which matches the logged on user
|
|
||||||
* then the request has read/write privileges
|
|
||||||
* 4. otherwise we query the defined relationships between users and use
|
|
||||||
* the minimum privileges returned from that analysis.
|
|
||||||
*/
|
|
||||||
$this->path = (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : "/");
|
|
||||||
$this->path = rawurldecode($this->path);
|
|
||||||
|
|
||||||
/** Allow a request for .../calendar.ics to translate into the calendar URL */
|
|
||||||
if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $this->path, $matches ) ) {
|
|
||||||
$this->path = $matches[1]. '/';
|
|
||||||
}
|
|
||||||
|
|
||||||
// dbg_error_log( "caldav", "Sanitising path '%s'", $this->path );
|
|
||||||
$bad_chars_regex = '/[\\^\\[\\(\\\\]/';
|
|
||||||
if ( preg_match( $bad_chars_regex, $this->path ) ) {
|
|
||||||
$this->DoResponse( 400, translate("The calendar path contains illegal characters.") );
|
|
||||||
}
|
|
||||||
if ( strstr($this->path,'//') ) $this->path = preg_replace( '#//+#', '/', $this->path);
|
|
||||||
|
|
||||||
$this->principal = new Principal('path',$this->path);
|
$this->principal = new Principal('path',$this->path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -0,0 +1,11 @@
|
|||||||
|
HTTP/1.1 415 Unsupported Media Type
|
||||||
|
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
|
||||||
|
Content-Length: 135
|
||||||
|
Content-Type: text/xml; charset="utf-8"
|
||||||
|
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<error xmlns="DAV:">
|
||||||
|
<content-encoding/>Unable to decode "deflate" content encoding.
|
||||||
|
</error>
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
#
|
||||||
|
# Testing with a process similar to iCal4
|
||||||
|
#
|
||||||
|
TYPE=PUT
|
||||||
|
URL=http://regression.host/caldav.php/user1/home/0546-deflate-PUT.ics
|
||||||
|
HEAD
|
||||||
|
|
||||||
|
HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504)
|
||||||
|
HEADER=Content-Type: text/calendar
|
||||||
|
HEADER=Content-Encoding: deflate
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
DATA=0544-gzip-PUT
|
||||||
278
testing/tests/regression-suite/utf8-test.data
Normal file
278
testing/tests/regression-suite/utf8-test.data
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//RSB//FreeMiCal//EN
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aüa Aaaaaa aaa Aaaaa aaa Aaaaaaaaa-Aaaaüa aaaaaaa aa. Aaaaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20071111
|
||||||
|
DTEND;VALUE=DATE:20071112
|
||||||
|
DTSTAMP:20070613T112658
|
||||||
|
DESCRIPTION:Aaaaa Aaaa aa 11.11.11 aaaaaaaaa/aaäaßaaa\n\n
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaa1111 - aaaaaaaaaaa aaaaaaaaaaa aaa aaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070915
|
||||||
|
DTEND;VALUE=DATE:20070916
|
||||||
|
DTSTAMP:20070613T112658
|
||||||
|
LOCATION:Aaaaaa/Aaa
|
||||||
|
DESCRIPTION:Aaaaaaaaaa aa 11.11.1111 aaa aaaaaaa@a-aaaaaaa.aa\nAaaaaaa
|
||||||
|
aaaaaaaa üaaa aaaaaaa@aaaaaaaa.aa\n\n
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:AAA'11
|
||||||
|
DTSTART;VALUE=DATE:20070824
|
||||||
|
DTEND;VALUE=DATE:20070825
|
||||||
|
DTSTAMP:20070613T112658
|
||||||
|
LOCATION:Aaa Aöaaa, Aaaaaaaaa
|
||||||
|
DESCRIPTION:aaaa://aaa.aaa11.aa/\n\n
|
||||||
|
CATEGORIES:Aaaaaaa Aaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa Aaaaaaaaaaaaaaäa
|
||||||
|
DTSTART:20070820T090000
|
||||||
|
DTEND:20070820T151500
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaa Aaaaaaaaaaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070713
|
||||||
|
DTEND;VALUE=DATE:20070714
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa aaa Aaaaa
|
||||||
|
DTSTART:20070710T093000
|
||||||
|
DTEND:20070710T120000
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaa Aaaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070630
|
||||||
|
DTEND;VALUE=DATE:20070701
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaa Aaaaaaaaaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070629
|
||||||
|
DTEND;VALUE=DATE:20070630
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaa Aaaaaaaaaaaa
|
||||||
|
DTSTART:20070628T193000
|
||||||
|
DTEND:20070628T223000
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaa aaaaa aa Aaaaaaaaa, aa Aaaaa+Aaaa aa aaa Aaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070628
|
||||||
|
DTEND;VALUE=DATE:20070629
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
DESCRIPTION:-A.A. Aaaaaaaöaaaaaa aaa Aaaaaaaaa Aaaaaaaaa (aaaaaa)\n-\n
|
||||||
|
\n
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaaaaaa
|
||||||
|
DTSTART:20070627T154500
|
||||||
|
DTEND:20070627T234500
|
||||||
|
DTSTAMP:20070613T112659
|
||||||
|
LOCATION:Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaaaaa aaa AaaaAaaaaa-Aaaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070616
|
||||||
|
DTEND;VALUE=DATE:20070617
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaa Aaaaaa
|
||||||
|
DTSTART;VALUE=DATE:20070615
|
||||||
|
DTEND;VALUE=DATE:20070618
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaa aa aaa Aüaaaa aaa Aaa aaa Aaaa
|
||||||
|
DTSTART;VALUE=DATE:20070614
|
||||||
|
DTEND;VALUE=DATE:20070622
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaaaa
|
||||||
|
DTSTART:20070613T180000
|
||||||
|
DTEND:20070613T203000
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaaaa aaa Aaaa
|
||||||
|
DTSTART:20070613T100000
|
||||||
|
DTEND:20070613T111000
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaaaa
|
||||||
|
DTSTART:20070612T180000
|
||||||
|
DTEND:20070612T200000
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:AaaAaa11-Aaaaaaaaaaäaaaaaaaaa
|
||||||
|
DTSTART:20070612T180000
|
||||||
|
DTEND:20070612T210000
|
||||||
|
DTSTAMP:20070613T112700
|
||||||
|
CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa aaa AaaAaa-Aaaaaaa
|
||||||
|
DTSTART:20070612T180000
|
||||||
|
DTEND:20070612T183000
|
||||||
|
DTSTAMP:20070613T112701
|
||||||
|
LOCATION:AaaAaa-Aaaa aaa Aaaaaaaaa
|
||||||
|
CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaa Aaaaa Aaaaaa aaaaaaaaa
|
||||||
|
DTSTART:20070612T160000
|
||||||
|
DTEND:20070612T172000
|
||||||
|
DTSTAMP:20070613T112701
|
||||||
|
LOCATION:Aaa Aaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa aaa Aaaaa aa Aaaaaaaaaaaaaaa
|
||||||
|
DTSTART:20070612T110000
|
||||||
|
DTEND:20070612T115000
|
||||||
|
DTSTAMP:20070613T112701
|
||||||
|
CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaa aaaaaaaaaaaa
|
||||||
|
DTSTART:20070614T100000
|
||||||
|
DTEND:20070614T110000
|
||||||
|
DTSTAMP:20070613T112701
|
||||||
|
CATEGORIES:Aaaaaäaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:AA/Aaaaaa Aa Aaaaaaa 1.1.1 aaaaaaaaaa (Aaaaa Aaaa Aaaaa)
|
||||||
|
DTSTART:20070611T180000
|
||||||
|
DTEND:20070611T181500
|
||||||
|
DTSTAMP:20070613T112702
|
||||||
|
CATEGORIES:Aaaaaa Aaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Üaaaa aaaaaaaaa aaa
|
||||||
|
DTSTART:20070611T160000
|
||||||
|
DTEND:20070611T180000
|
||||||
|
DTSTAMP:20070613T112702
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaa aöaaaaaa aaaaaaaa
|
||||||
|
DTSTART:20070611T140000
|
||||||
|
DTEND:20070611T180000
|
||||||
|
DTSTAMP:20070613T112702
|
||||||
|
DESCRIPTION:Aaaaaaaa Aaaaaa Aaaaaa\nA-Aaaaa aaaaaaaaaa\nAa Aaaaaa aaaa
|
||||||
|
aaa\nAa Aaaaaaa-Aaaa-Aaaaa aaaaaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaa aaa Aaaa aaa Aaaaa
|
||||||
|
DTSTART:20070611T131500
|
||||||
|
DTEND:20070611T134500
|
||||||
|
DTSTAMP:20070613T112702
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aa Aaaaaaaaaaa Aaaa Aaaaaaa aa. Aaaaaa aaaaaaaaa Aaaaaaaaaaaaa
|
||||||
|
a
|
||||||
|
DTSTART:20101124T133000
|
||||||
|
DTEND:20101124T140000
|
||||||
|
DTSTAMP:20101123T221234
|
||||||
|
LOCATION:A1.111
|
||||||
|
DESCRIPTION:Aaaaaaaaaaaaaaaaaa\nAaaaaaaaaaaaa, aaaa aa aaaa aa aaa Aaa
|
||||||
|
aaaaaaaaaaaaa aaaaaaa, aüaa Aaaaäaaaaa Aaa\n\nAaa Aaaaaaa, aaaa Aaaaaa
|
||||||
|
aäaaaaaa Aaaaa Aaaaaaaaaaa\n\nAaaaaaaa aaa A-Aaaa aa Aaaaaa Aaaaa AA
|
||||||
|
AAAAAAA "aaaaaa:aaaaaaa@aaaa.aaa-aaaaaaaaa.aa" aaaaaaa@aaaa.aaa-aaaaaa
|
||||||
|
aaa.aa aaaa aaa aaa Aaaaaaa
|
||||||
|
CLASS:PRIVATE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa aaa Aaaaaaäaaaaaaaa Aaaaaaa
|
||||||
|
DTSTART:20110106T140000
|
||||||
|
DTEND:20110106T150000
|
||||||
|
DTSTAMP:20101207T215936
|
||||||
|
LOCATION:Aaaaaaaaaäa Aaaaaaaaa - A1.111
|
||||||
|
DESCRIPTION:Aaa Aaaaaa aaaaaa aaaa aaa aaaaa aaaaaaaaaa: \n* Aaaaaaaaa
|
||||||
|
aaaaa aaa Aaaaaaa aaa Aaaaaaaaaa - Aaaaa aaa Aaaaaaaaa, Aaaaaaaaaaa aa
|
||||||
|
aäß aaa Aaäaaaaaaaaaaaaaaaaaa \n* Aaaaa aaa Aaaaaaaaa aaa Aaaaaaaaaaaa
|
||||||
|
aaa Aaäaaaaaa aaa Aaaaaaaaaaaaaaaa - Aaaaaaaaaaaaaaaaößaa, Aaaaaaaaaa
|
||||||
|
aaaaaa aaa aaaßaa Aaaaaaaaaaaaaaa \n* A-Aaaaaaaa-Aaaaaaaaa aaa Aaaaaaa
|
||||||
|
aaa, Aaaaaaaaaa Aaaaaaaaaaaaaaaaa aaa aaaAA-Aaaaaaaaa, Aaaaaaaaaaaaaaa
|
||||||
|
aa Aaaaaa \n* Aaaaaaaaaaaaa aaa Aaaaaaaaaaaaaaaa aaa 11.11.1111 aaa Aa
|
||||||
|
aaaa aaa aaa Aaaaaaaaa Aaaaaaaaaaaaaa - Aaaaaaaaa Aaaaa, Aaaaaaa Aaaaa
|
||||||
|
aaa \n* Aaaaaaaaaaaaaa aüa Aaaaaaaaaaaaäaaa
|
||||||
|
CATEGORIES:AAAA 1111/1111
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaaaaaa Aaaa
|
||||||
|
DTSTART:20110108T140000
|
||||||
|
DTEND:20110109T000000
|
||||||
|
DTSTAMP:20101230T124751
|
||||||
|
LOCATION:Aaaaaaa
|
||||||
|
DESCRIPTION:Aaa aaa aa aaa 1 Aaaaaaa aaaaaa aaaaaa (aaaaaa)\n- aaaaaa
|
||||||
|
aaaaaaaaaa, aaaaaaa aaaaaaaa\n- aaaa aaaaaa aaaaaaa\n- aaa aaaaaaaa aa
|
||||||
|
aaa aäaaaaaa aaaa aaaaaaaaaa\n- aa aaaaaa aaaaaaaa aaaa aa aaaa aaaa.
|
||||||
|
aaaaaaaaa, aaaaaaaa aaaaaa aaa aa
|
||||||
|
BEGIN:VALARM
|
||||||
|
TRIGGER:-PT4320M
|
||||||
|
DESCRIPTION:Aaaaa: Aaaaaaaaaaa Aaaa
|
||||||
|
ACTION:DISPLAY
|
||||||
|
END:VALARM
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaa - Aaa Aaaaaaa (aaa Aaaaaa aaa Aaaaaa)
|
||||||
|
DTSTART:20101228T201500
|
||||||
|
DTEND:20101228T211500
|
||||||
|
DTSTAMP:20101230T145020
|
||||||
|
LOCATION:Aaaa Aaaaaaaa
|
||||||
|
CATEGORIES:Aaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa aaaaaaa
|
||||||
|
DTSTART:20110104T190000
|
||||||
|
DTEND:20110104T200000
|
||||||
|
DTSTAMP:20110101T134833
|
||||||
|
CLASS:PRIVATE
|
||||||
|
BEGIN:VALARM
|
||||||
|
TRIGGER:-PT15M
|
||||||
|
DESCRIPTION:Aaaaa: Aaaaaaa aaaaaaa
|
||||||
|
ACTION:DISPLAY
|
||||||
|
END:VALARM
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:AA/Aaaaa Aüa aaaaaa Aaaaaaaa aaaaaaaaaaaa
|
||||||
|
DTSTART:20101230T140000
|
||||||
|
DTEND:20101230T143000
|
||||||
|
DTSTAMP:20110101T134922
|
||||||
|
CATEGORIES:Aaaaaa Aaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:AA/Aaaaa Aaaaaaaaaaaaa aaa Aaa
|
||||||
|
DTSTART:20101231T112000
|
||||||
|
DTEND:20101231T140500
|
||||||
|
DTSTAMP:20110101T135020
|
||||||
|
DESCRIPTION:Aaaaaaaaaaa aaa Aaaaaäaaa aaaa Aaaaa aaaaaaaaaaaa aaa aaaa
|
||||||
|
äaa\nA-Aaaa-Aaaaaaaa aaa Aaaa Aaaaaaaa aaa aaa aaaa aaa Aaaa Aaaaüaaa
|
||||||
|
üaaaaaaaaa\nAaaaaaa aaa Aaaaaaaaaaaaaaaaa aa aaa Aaaaaaaa aaaa Aaaaaaa
|
||||||
|
aa aaa A-Aaaaa aaaaaaaaaa\nAaa Aaaa Aaaaaaaa aaaaaaaaaa aaa Aaaaaaaaa
|
||||||
|
aaaaaaaaa\nAaaaaaaaaaaaaaaa Aaaaaaaa
|
||||||
|
CATEGORIES:Aaaaaa Aaaaaaa
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:Aaaaaaa aaa aaa AAA, Aaaaa Aaaaaaaa aaa Aaaa aa aaa Aaaaaaa aa
|
||||||
|
a Aaaaaaaaaaaaaaaaaaaaaaaaa aaa Aaaaaaaaaa aaa Aaaaaaaaaa aa aaaaaaaaa
|
||||||
|
a
|
||||||
|
DTSTART:20110111T140000
|
||||||
|
DTEND:20110111T160000
|
||||||
|
DTSTAMP:20110111T220245
|
||||||
|
LOCATION:Aaaaaaaaaäa Aaaaaaaaa - AAA, Aüaa aaa Aaaa Aaaaaa
|
||||||
|
CATEGORIES:AAAA 1111/1111
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
||||||
Loading…
x
Reference in New Issue
Block a user