Merge pull request #2173 from pbiering/fix-trailing-space-on-timezone
Fix trailing space on timezone
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
* Extension: item verification on commandline
|
||||
* Improvement: catch lack of support of PERIOD in vobject <= 0.9.9
|
||||
* Fix: sharing: backmap of REPORT/PROPPATCH hrefs is now URL-encode-aware (edit of a shared collection failed when the principal contains '@')
|
||||
* Workaround: remove trailing spaces on TZID and TZNAME appended by buggy Microsoft clients
|
||||
|
||||
## 3.7.5
|
||||
* Add: [sharing] conversion_bday_summary_template (customize summary)
|
||||
|
||||
@@ -69,6 +69,9 @@ def read_components(s: str) -> List[vobject.base.Component]:
|
||||
s = re.sub(r'[\x00-\x08\x0B\x0C\x0E-\x1F]', '', s)
|
||||
# Workaround delete all empty lines to avoid vobject parsing errors
|
||||
s = re.sub(r'(?m)^[ \t]*\r?\n', '', s)
|
||||
# Delete trailing space on TZID and TZNAME (Microsoft Outlook bug)
|
||||
s = re.sub(r'(TZID|TZNAME)(:[^\r\n]+) (\r?\n)', r"\1\2\3", s) # fix VTIMEZONE
|
||||
s = re.sub(r'(TZID=[^:]+) (:)', r"\1\2", s) # fix DTSTART/DTEND
|
||||
return list(vobject.readComponents(s, allowQP=True))
|
||||
|
||||
|
||||
|
||||
44
radicale/tests/static/event_issue2172.ics
Normal file
44
radicale/tests/static/event_issue2172.ics
Normal file
@@ -0,0 +1,44 @@
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Mitteleuropäische Zeit
|
||||
BEGIN:STANDARD
|
||||
DTSTART:20001025T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
TZNAME:Mitteleuropäische Zeit
|
||||
TZOFFSETFROM:+0200
|
||||
TZOFFSETTO:+0100
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:20000329T010000
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
|
||||
TZNAME:Mitteleuropäische Sommerzeit
|
||||
TZOFFSETFROM:+0100
|
||||
TZOFFSETTO:+0200
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
UID:20260619T141049Z_FED000F14A0
|
||||
DTSTART;TZID=Mitteleuropäische Zeit :20260701T170000
|
||||
DTEND;TZID=Mitteleuropäische Zeit :20260701T183000
|
||||
ATTENDEE;CN=Mario Voigt;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:REDACTED@REDACTED
|
||||
CLASS:PUBLIC
|
||||
DESCRIPTION:REDACTED
|
||||
DTSTAMP:20260621T173336Z
|
||||
LAST-MODIFIED:20260621T173336Z
|
||||
LOCATION:Stadtwerkstatt
|
||||
ORGANIZER;CN=REDACTED;ROLE=CHAIR:mailto:REDACTED
|
||||
PRIORITY:5
|
||||
SUMMARY:REDACTED
|
||||
TRANSP:OPAQUE
|
||||
X-GWBOX-TYPE:SENT
|
||||
X-GWCLASS:NORMAL
|
||||
X-GWITEM-TYPE:APPOINTMENT
|
||||
X-GWSHOW-AS:BUSY
|
||||
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
|
||||
X-MOZ-INVITED-ATTENDEE:mailto:REDACTED@REDACTED
|
||||
X-MOZ-RECEIVED-DTSTAMP:20260621T173336Z
|
||||
X-MOZ-RECEIVED-SEQUENCE:0
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
@@ -193,6 +193,25 @@ permissions: RrWw""")
|
||||
assert "RDATE;VALUE=PERIOD:20000102T000000Z/20000402T000000Z,20010102T000000Z/20010" in answer
|
||||
assert " 402T000000Z" in answer
|
||||
|
||||
def test_add_event_with_tz_trailing_space(self) -> None:
|
||||
"""Add an event."""
|
||||
self.mkcalendar("/calendar.ics/")
|
||||
event = get_file_content("event_issue2172.ics")
|
||||
path = "/calendar.ics/event_issue2172.ics"
|
||||
self.put(path, event)
|
||||
_, headers, answer = self.request("GET", path, check=200)
|
||||
assert "ETag" in headers
|
||||
assert headers["Content-Type"] == "text/calendar; charset=utf-8"
|
||||
assert "DESCRIPTION" in answer
|
||||
assert "TZID:Mitteleuropäische Zeit " not in answer
|
||||
assert "TZID:Mitteleuropäische Zeit" in answer
|
||||
assert "TZNAME:Mitteleuropäische Zeit " not in answer
|
||||
assert "TZNAME:Mitteleuropäische Zeit" in answer
|
||||
assert "DTSTART;TZID=Mitteleuropäische Zeit :20260701T170000" not in answer
|
||||
assert "DTSTART;TZID=Mitteleuropäische Zeit:20260701T170000" in answer
|
||||
assert "DTEND;TZID=Mitteleuropäische Zeit :20260701T183000" not in answer
|
||||
assert "DTEND;TZID=Mitteleuropäische Zeit:20260701T183000" in answer
|
||||
|
||||
def test_add_event_with_desc_ok(self) -> None:
|
||||
"""Add an event."""
|
||||
self.mkcalendar("/calendar.ics/")
|
||||
|
||||
Reference in New Issue
Block a user