6.0.0-alpha12
6/7/25

[#3243] PHP fatal error if DTEND is not present in imported iCalendar file
Summary PHP fatal error if DTEND is not present in imported iCalendar file
Queue Kronolith
Queue Version 2.0.6
Type Bug
State Resolved
Priority 1. Low
Owners
Requester gauret (at) free (dot) fr
Created 01/11/2006 (7087 days ago)
Due
Updated 01/11/2006 (7087 days ago)
Assigned
Resolved 01/11/2006 (7087 days ago)
Github Issue Link
Github Pull Request
Milestone
Patch No

History
01/11/2006 11:43:41 AM Jan Schneider Comment #2
State ⇒ Resolved
Reply to this comment
Tweaked and committed, thanks.
01/11/2006 10:44:25 AM gauret (at) free (dot) fr Comment #1
State ⇒ Unconfirmed
Priority ⇒ 1. Low
Type ⇒ Bug
Summary ⇒ PHP fatal error if DTEND is not present in imported iCalendar file
Queue ⇒ Kronolith
New Attachment: failed-event.ics Download
Reply to this comment
An iCalendar event can have no DTEND attribute, in which case the end 
date is considered to be equal to the start date. From 
http://www.ietf.org/rfc/rfc2445.txt :

« For cases where a "VEVENT" calendar component specifies a "DTSTART"

    property with a DATE data type but no "DTEND" property, the events

    non-inclusive end is the end of the calendar date specified by the

    "DTSTART" property. For cases where a "VEVENT" calendar component

    specifies a "DTSTART" property with a DATE-TIME data type but no

    "DTEND" property, the event ends on the same calendar date and time

    of day specified by the "DTSTART" property. »



I have attached an event which fails to import properly in the latest 
stable Kronolith.

Here's a very simple patch to make it work :



--- lib/Driver.php.orig Wed Jan 11 11:36:09 2006

+++ lib/Driver.php      Wed Jan 11 11:34:40 2006

@@ -603,6 +603,8 @@

              $duration = $vEvent->getAttribute('DURATION');

              if (!is_array($duration) && !is_a($duration, 'PEAR_Error')) {

                  $this->end = &new 
Horde_Date($this->start->timestamp() + $duration);

+            } else { // Neither DTEND nor DURATION : end date is 
start date (see rfc)

+                $this->end = $this->start;

              }

          }



Feel free to adapt it to your needs of course.

Saved Queries