plugins/calendar plugins/libcalendaring

Thomas Brüderli bruederli at kolabsys.com
Wed Nov 21 10:33:41 CET 2012


 plugins/calendar/drivers/calendar_driver.php          |   19 ++++++++++++++++++
 plugins/calendar/drivers/database/database_driver.php |    3 ++
 plugins/calendar/drivers/kolab/kolab_driver.php       |    3 ++
 plugins/calendar/lib/calendar_ical.php                |   11 ++++++++--
 plugins/libcalendaring/libcalendaring.php             |    5 ++++
 5 files changed, 39 insertions(+), 2 deletions(-)

New commits:
commit db7d41432402093da94a1e5af6bfaa669ccc9449
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Nov 21 10:33:02 2012 +0100

    Correctly handle iTip replies without valid DTSTSART/DTEND attributes (#1178)

diff --git a/plugins/calendar/drivers/calendar_driver.php b/plugins/calendar/drivers/calendar_driver.php
index deb7502..15183e9 100644
--- a/plugins/calendar/drivers/calendar_driver.php
+++ b/plugins/calendar/drivers/calendar_driver.php
@@ -249,6 +249,25 @@ abstract class calendar_driver
   abstract function dismiss_alarm($event_id, $snooze = 0);
 
   /**
+   * Check the given event object for validity
+   *
+   * @param array Event object as hash array
+   * @return boolean True if valid, false if not
+   */
+  public function validate($event)
+  {
+    $valid = true;
+
+    if (!is_object($event['start']) || !is_a($event['start'], 'DateTime'))
+      $valid = false;
+    if (!is_object($event['end']) || !is_a($event['end'], 'DateTime'))
+      $valid = false;
+
+    return $valid;
+  }
+
+
+  /**
    * Get list of event's attachments.
    * Drivers can return list of attachments as event property.
    * If they will do not do this list_attachments() method will be used.
diff --git a/plugins/calendar/drivers/database/database_driver.php b/plugins/calendar/drivers/database/database_driver.php
index 5aac2dd..1f26446 100644
--- a/plugins/calendar/drivers/database/database_driver.php
+++ b/plugins/calendar/drivers/database/database_driver.php
@@ -210,6 +210,9 @@ class database_driver extends calendar_driver
    */
   public function new_event($event)
   {
+    if (!$this->validate($event))
+      return false;
+
     if (!empty($this->calendars)) {
       if ($event['calendar'] && !$this->calendars[$event['calendar']])
         return false;
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 65bbbb2..0251107 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -286,6 +286,9 @@ class kolab_driver extends calendar_driver
    */
   public function new_event($event)
   {
+    if (!$this->validate($event))
+      return false;
+
     $cid = $event['calendar'] ? $event['calendar'] : reset(array_keys($this->calendars));
     if ($storage = $this->calendars[$cid]) {
       // handle attachments to add
diff --git a/plugins/calendar/lib/calendar_ical.php b/plugins/calendar/lib/calendar_ical.php
index 20d5757..34eeeef 100644
--- a/plugins/calendar/lib/calendar_ical.php
+++ b/plugins/calendar/lib/calendar_ical.php
@@ -160,8 +160,15 @@ class calendar_ical
       $event['end']->sub(new DateInterval('PT23H'));
 
     // assign current timezone to event start/end
-    $event['start']->setTimezone($this->cal->timezone);
-    $event['end']->setTimezone($this->cal->timezone);
+    if (is_a($event['start'], 'DateTime'))
+        $event['start']->setTimezone($this->cal->timezone);
+    else
+        unset($event['start']);
+
+    if (is_a($event['end'], 'DateTime'))
+        $event['end']->setTimezone($this->cal->timezone);
+    else
+        unset($event['end']);
 
     // map other attributes to internal fields
     $_attendees = array();
diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index fcbce27..24f98cb 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -206,6 +206,11 @@ class libcalendaring extends rcube_plugin
     public function event_date_text($event, $tzinfo = false)
     {
         $fromto = '';
+
+        // abort if no valid event dates are given
+        if (!is_object($event['start']) || !is_a($event['start'], 'DateTime') || !is_object($event['end']) || !is_a($event['end'], 'DateTime'))
+            return $fromto;
+
         $duration = $event['start']->diff($event['end'])->format('s');
 
         $this->date_format_defaults();





More information about the commits mailing list