http://bugs.meego.com/show_bug.cgi?id=1332
Summary: Synthesis timezone parser: does not support -1SU day
of month
Classification: MeeGo Projects
Product: SyncEvolution
Version: unspecified
Platform: All
OS/Version: IA
Status: WAITING FOR UPSTREAM
Severity: major
Priority: High
Component: SyncML
AssignedTo: patrick.ohly(a)intel.com
ReportedBy: patrick.ohly(a)intel.com
QAContact: jingke.zhang(a)intel.com
CC: syncevolution-bugs(a)meego.bugs,
syncevolution-syncml-bugs(a)meego.bugs
Estimated Hours: 0.0
As a result of this limitation, VTIMEZONE information in events is basically
ignored when sending to a peer and time stamps get converted to UTC
incorrectly. This primarily concerns some events created by Outlook.
Here's an example and the preliminary analysis, discussed on the Synthesis
list:
-------- Forwarded Message --------
From: Patrick Ohly <patrick.ohly(a)intel.com>
To: Synthesis <os-libsynthesis(a)synthesis.ch>
Subject: wrong interpretation of timezone information
Date: Wed, 21 Apr 2010 09:39:09 +0200
Hello!
I have a meeting in my Evolution calendar which I synchronize with
SyncEvolution. I noticed that the outgoing VEVENT has start and end time
converted to UTC times which are one hour off.
Here's the stripped down event:
BEGIN:VCALENDAR
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:GMT Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T010000
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:test event
DTSTART;TZID=GMT Standard Time:20100421T150000
DTEND;TZID=GMT Standard Time:20100421T160000
UID:040000008200E00074C5B7101A82E0080000000000B5A586D0A4CA01000000000000000010
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20100415T035521Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:4
END:VEVENT
END:VCALENDAR
This is parsed into a field list as follows:
- 18 : timestamp DTSTART [ 0, 0, 0] : 2010-04-21T15:00:00Z
(TZ: UTC)
- 19 : timestamp DTEND [ 0, 0, 0] : 2010-04-21T16:00:00Z
(TZ: UTC)
And then encoded like this when sent to the server:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.6//EN
BEGIN:VEVENT
STATUS:CONFIRMED
LAST-MODIFIED:20100421T071812Z
DTSTAMP:20100421T071905Z
CREATED:20100415T065234Z
UID:040000008200E00074C5B7101A82E0080000000000B5A586D0A4CA01000000000000000010
CLASS:PUBLIC
TRANSP:OPAQUE
PRIORITY:5
SUMMARY:test event
DTSTART:20100421T150000Z
DTEND:20100421T160000Z
END:VEVENT
END:VCALENDAR
The correct start time in UTC is 14:00, because this "GMT Standard Time"
VTIMEZONE has a 1 hour offset during summer saving time. The event was
created by Outlook.
Any idea how that happens?
-------- Forwarded Message --------
From: Patrick Ohly <patrick.ohly(a)intel.com>
To: Beat Forster <bfo(a)synthesis.ch>
Cc: Synthesis <os-libsynthesis(a)synthesis.ch>
Subject: Re: [os-libsynthesis] wrong interpretation of timezone information
Date: Mon, 26 Apr 2010 13:40:53 +0100
On Wed, 2010-04-21 at 09:39 +0200, Patrick Ohly wrote:
I have a meeting in my Evolution calendar which I synchronize with
SyncEvolution. I noticed that the outgoing VEVENT has start and end
time
converted to UTC times which are one hour off.
Here's the stripped down event:
BEGIN:VCALENDAR
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:GMT Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T010000
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:test event
DTSTART;TZID=GMT Standard Time:20100421T150000
DTEND;TZID=GMT Standard Time:20100421T160000
UID:040000008200E00074C5B7101A82E0080000000000B5A586D0A4CA01000000000000000010
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20100415T035521Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:4
END:VEVENT
END:VCALENDAR
This fails because RRULE2toInternal() in rrule.cpp fails to convert the
RRULE properties into the internal format. It bombs out here:
switch (freq)
{
...
case 'Y' :
if (byday == "" ||
(byday.length() == 2 && byday[0] ==
RRULE_weekdays[startwday][0] &&
byday[1] ==
RRULE_weekdays[startwday][1]))
{
...
}
else
{
goto incompat;
}
It reaches the "goto incompat" because byday == "-1SU".
Recurrence rules with "last day in month ..." are common for VTIMEZONEs.
Beat, is that really something that is not handled by the Synthesis code
at the moment? What would be necessary to add support for it?
--
Configure bugmail:
http://bugs.meego.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching someone on the CC list of the bug.