]> granicus.if.org Git - php/commitdiff
Fixed bug #72581 (previous property undefined in Exception after deserialization)
authorXinchen Hui <laruence@gmail.com>
Tue, 12 Jul 2016 03:51:20 +0000 (11:51 +0800)
committerXinchen Hui <laruence@gmail.com>
Tue, 12 Jul 2016 03:51:20 +0000 (11:51 +0800)
NEWS
Zend/tests/bug72581.phpt [new file with mode: 0644]
Zend/zend_exceptions.c

diff --git a/NEWS b/NEWS
index b2289638ac8938520a73ebe356ca7d249a293d46..437d77feb9d2b39d23d018fcc4bb124ccaa67173 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP                                                                        NEWS
 ?? ??? 2016 PHP 7.0.10
 
 - Core:
+  . Fixed bug #72581 (previous property undefined in Exception after
+    deserialization). (Laruence)
   . Fixed bug #72496 (Cannot declare public method with signature incompatible
     with parent private method). (Pedro Magalhães)
   . Fixed bug #72024 (microtime() leaks memory). (maroszek at gmx dot net)
diff --git a/Zend/tests/bug72581.phpt b/Zend/tests/bug72581.phpt
new file mode 100644 (file)
index 0000000..775f6e3
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Bug #72581 (previous property undefined in Exception after deserialization)
+--FILE--
+<?php
+
+$e = new Exception('aaa', 200);
+
+$a = serialize($e);
+
+$b = unserialize($a);
+
+var_dump($b->__toString());
+?>
+--EXPECTF--
+string(%s) "Exception: aaa in %sbug72581.php:%d
+Stack trace:
+#0 {main}"
index 663e83f8215aefa34f807f5c6780a02e6e6cada5..374f3045b3e86fbdef0ea6a1db3a51d2ff54187c 100644 (file)
@@ -291,9 +291,8 @@ ZEND_METHOD(exception, __construct)
 /* {{{ proto Exception::__wakeup()
    Exception unserialize checks */
 #define CHECK_EXC_TYPE(name, type) \
-       ZVAL_UNDEF(&value); \
        pvalue = zend_read_property(i_get_exception_base(object), (object), name, sizeof(name) - 1, 1, &value); \
-       if(Z_TYPE_P(pvalue) != IS_UNDEF && Z_TYPE_P(pvalue) != type) { \
+       if (Z_TYPE_P(pvalue) != IS_NULL && Z_TYPE_P(pvalue) != type) { \
                zval tmp; \
                ZVAL_STRINGL(&tmp, name, sizeof(name) - 1); \
                Z_OBJ_HANDLER_P(object, unset_property)(object, &tmp, NULL); \