From ea466a316ffc39c7d5733c5aa1c37ab604af6e57 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 17 Jun 2014 09:38:54 +0200 Subject: [PATCH 1/2] Fix Request #67453 Allow to unserialize empty data. SplDoublyLinkedList, SplObjectStorage and ArrayObject have empty constructor (no arg), so it make sense to allow to unserialize empty data. This allow the hack (used in various place, including PHPUnit) to instanciate class without call to constructor to work. --- ext/spl/spl_array.c | 1 - ext/spl/spl_dllist.c | 1 - ext/spl/spl_observer.c | 1 - ext/spl/tests/ArrayObject_unserialize_empty_string.phpt | 9 +++------ .../SplObjectStorage_unserialize_invalid_parameter3.phpt | 6 +++--- 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 9e3848dbfb0..4191b0db0e0 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -1749,7 +1749,6 @@ SPL_METHOD(Array, unserialize) } if (buf_len == 0) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Empty serialized string cannot be empty"); return; } diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c index 772d780e014..fb88f589081 100644 --- a/ext/spl/spl_dllist.c +++ b/ext/spl/spl_dllist.c @@ -1192,7 +1192,6 @@ SPL_METHOD(SplDoublyLinkedList, unserialize) } if (buf_len == 0) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Serialized string cannot be empty"); return; } diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index 91830ab000d..57ddf492d1c 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -831,7 +831,6 @@ SPL_METHOD(SplObjectStorage, unserialize) } if (buf_len == 0) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Empty serialized string cannot be empty"); return; } diff --git a/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt b/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt index 75d8a413214..4c446c82b9f 100644 --- a/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt +++ b/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt @@ -1,5 +1,5 @@ --TEST-- -ArrayObject: test that you cannot unserialize a empty string +ArrayObject: test that you can unserialize a empty string --CREDITS-- Havard Eide #PHPTestFest2009 Norway 2009-06-09 \o/ @@ -8,9 +8,6 @@ Havard Eide $a = new ArrayObject(array()); $a->unserialize(""); ?> +Done --EXPECTF-- -Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Empty serialized string cannot be empty' in %s.php:%d -Stack trace: -#0 %s(%d): ArrayObject->unserialize('') -#1 {main} - thrown in %s.php on line %d +Done diff --git a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt index 4c2dd75e144..617f85e63c8 100644 --- a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt +++ b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt @@ -1,5 +1,5 @@ --TEST-- -Check that SplObjectStorage::unserialize throws exception when NULL passed +Check that SplObjectStorage::unserialize doesn't throws exception when NULL passed --CREDITS-- PHPNW Testfest 2009 - Simon Westcott (swestcott@gmail.com) --FILE-- @@ -14,6 +14,6 @@ try { } ?> +Done --EXPECTF-- -Empty serialized string cannot be empty - +Done From ba34f0c2e868f37eaacf62e8b698e972b80a872f Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 17 Jun 2014 09:41:10 +0200 Subject: [PATCH 2/2] NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index e7a5e88e193..f496f900165 100644 --- a/NEWS +++ b/NEWS @@ -49,6 +49,7 @@ PHP NEWS - SPL: . Fixed bug #66127 (Segmentation fault with ArrayObject unset). (Stas) + . Fixed request #67453 (Allow to unserialize empty data). (Remi) - Streams: . Fixed bug #67430 (http:// wrapper doesn't follow 308 redirects). (Adam)