Commit:    7197f0ffccea7f195bc28571e30c389eadda874b
Author:    Xinchen Hui <larue...@php.net>         Sat, 9 Mar 2013 23:08:14 +0800
Parents:   f52b2e6a6572018eb61ad830206ed172b033232a
Branches:  PHP-5.4

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=7197f0ffccea7f195bc28571e30c389eadda874b

Log:
Fixed confused exception message while user threw exception

Changed paths:
  A  Zend/tests/bug64354.phpt
  M  Zend/zend_interfaces.c


Diff:
diff --git a/Zend/tests/bug64354.phpt b/Zend/tests/bug64354.phpt
new file mode 100644
index 0000000..03a4b80
--- /dev/null
+++ b/Zend/tests/bug64354.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #64354 (Unserialize array of objects whose class can't be autoloaded fail)
+--FILE--
+<?php
+class B implements Serializable {
+    public function serialize() {
+        throw new Exception("serialize");
+        return NULL;
+    }
+
+    public function unserialize($data) {
+    }
+}
+
+$data = array(new B);
+
+try {
+    serialize($data);
+} catch (Exception $e) { 
+    var_dump($e->getMessage());
+}
+?>
+--EXPECTF--
+string(9) "serialize"
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c
index 384b66d..e2e81ed 100644
--- a/Zend/zend_interfaces.c
+++ b/Zend/zend_interfaces.c
@@ -452,7 +452,7 @@ ZEND_API int zend_user_serialize(zval *object, unsigned 
char **buffer, zend_uint
                zval_ptr_dtor(&retval);
        }
 
-       if (result == FAILURE) {
+       if (result == FAILURE && !EG(exception)) {
                zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "%s::serialize() 
must return a string or NULL", ce->name);
        }
        return result;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to