]> granicus.if.org Git - php/commitdiff
- MF52: Fixed bug #44703 (htmlspecialchars() does not detect bad character set
authorDerick Rethans <derick@php.net>
Wed, 16 Apr 2008 17:24:00 +0000 (17:24 +0000)
committerDerick Rethans <derick@php.net>
Wed, 16 Apr 2008 17:24:00 +0000 (17:24 +0000)
  argument).
#- WIll merge to 5.3 later, that branch has some more modifications.

ext/date/php_date.c
ext/date/tests/bug44742.phpt [new file with mode: 0644]

index 0bd27f8dff3ada096bdf990eca536243f1186379..bffda005cbc5046830b94c422f3fc62c05f321b7 100644 (file)
@@ -2750,9 +2750,19 @@ PHP_FUNCTION(timezone_offset_get)
        dateobj = (php_date_obj *) zend_object_store_get_object(dateobject TSRMLS_CC);
        DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
 
-       offset = timelib_get_time_zone_info(dateobj->time->sse, tzobj->tzi.tz);
-       RETVAL_LONG(offset->offset);
-       timelib_time_offset_dtor(offset);
+       switch (tzobj->type) {
+               case TIMELIB_ZONETYPE_ID:
+                       offset = timelib_get_time_zone_info(dateobj->time->sse, tzobj->tzi.tz);
+                       RETVAL_LONG(offset->offset);
+                       timelib_time_offset_dtor(offset);
+                       break;
+               case TIMELIB_ZONETYPE_OFFSET:
+                       RETURN_LONG(tzobj->tzi.utc_offset * -60);
+                       break;
+               case TIMELIB_ZONETYPE_ABBR:
+                       RETURN_LONG((tzobj->tzi.z.utc_offset - (tzobj->tzi.z.dst*60)) * -60);
+                       break;
+       }
 }
 /* }}} */
 
diff --git a/ext/date/tests/bug44742.phpt b/ext/date/tests/bug44742.phpt
new file mode 100644 (file)
index 0000000..e6df1ef
--- /dev/null
@@ -0,0 +1,35 @@
+--TEST--
+Bug #44742 (timezone_offset_get() causes segmentation faults)
+--FILE--
+<?php
+$dates = array(
+       "2008-04-11 00:00:00+0000",
+       "2008-04-11 00:00:00+0200",
+       "2008-04-11 00:00:00+0330",
+       "2008-04-11 00:00:00-0500",
+       "2008-04-11 00:00:00-1130",
+       "2008-04-11 00:00:00 CEST",
+       "2008-04-11 00:00:00 CET",
+       "2008-04-11 00:00:00 UTC",
+       "2008-04-11 00:00:00 America/New_York",
+       "2008-04-11 00:00:00 Europe/Oslo",
+       "2008-04-11 00:00:00 Asia/Singapore",
+);
+foreach ($dates as $date)
+{
+       $date = date_create($date);
+       var_dump(timezone_offset_get(date_timezone_get($date), $date));
+}
+?>
+--EXPECT--
+int(0)
+int(7200)
+int(12600)
+int(-18000)
+int(-41400)
+int(7200)
+int(3600)
+int(0)
+int(-14400)
+int(7200)
+int(28800)