summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schlüter <johannes@php.net>2009-06-25 15:07:36 +0000
committerJohannes Schlüter <johannes@php.net>2009-06-25 15:07:36 +0000
commit63543769246a323ddc011126830e2f03f55a39c7 (patch)
tree789ff2281cf46c513c6de46fb03987cea0cb1125
parentf03c5db12edd0dc527c6471feddfc3ccfbcc88eb (diff)
downloadphp-git-63543769246a323ddc011126830e2f03f55a39c7.tar.gz
MFH: Fixed bug #48678 (DateInterval segfaults when unserialising (Ilia)
-rw-r--r--ext/date/php_date.c4
-rw-r--r--ext/date/tests/bug48678.phpt31
2 files changed, 35 insertions, 0 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 230f1a5b0c..f55115be21 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2213,6 +2213,10 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC)
props = intervalobj->std.properties;
+ if (!intervalobj->initialized) {
+ return props;
+ }
+
#define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \
MAKE_STD_ZVAL(zv); \
ZVAL_LONG(zv, intervalobj->diff->f); \
diff --git a/ext/date/tests/bug48678.phpt b/ext/date/tests/bug48678.phpt
new file mode 100644
index 0000000000..bf349412ba
--- /dev/null
+++ b/ext/date/tests/bug48678.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #48678 DateInterval segfaults when unserialising
+--FILE--
+<?php
+$x = new dateinterval("P3Y6M4DT12H30M5S");
+print_r($x);
+$y = unserialize(serialize($x));
+print_r($y);
+--EXPECT--
+DateInterval Object
+(
+ [y] => 3
+ [m] => 6
+ [d] => 4
+ [h] => 12
+ [i] => 30
+ [s] => 5
+ [invert] => 0
+ [days] => 0
+)
+DateInterval Object
+(
+ [y] => 3
+ [m] => 6
+ [d] => 4
+ [h] => 12
+ [i] => 30
+ [s] => 5
+ [invert] => 0
+ [days] => 0
+)