]> granicus.if.org Git - php/commitdiff
Fix bug #67492: unserialize() SPL ArrayObject / SPLObjectStorage Type Confusion
authorStanislav Malyshev <stas@php.net>
Sun, 22 Jun 2014 02:46:16 +0000 (19:46 -0700)
committerStanislav Malyshev <stas@php.net>
Tue, 24 Jun 2014 17:32:11 +0000 (10:32 -0700)
ext/spl/spl_array.c
ext/spl/spl_observer.c
ext/spl/tests/SplObjectStorage_unserialize_bad.phpt

index c4b237b4b7ab1b2f87a479517225130362e2c2ae..c38065f1493f5a17d453c47ad0eb9107c2f80545 100644 (file)
@@ -1804,7 +1804,7 @@ SPL_METHOD(Array, unserialize)
        ++p;
 
        ALLOC_INIT_ZVAL(pmembers);
-       if (!php_var_unserialize(&pmembers, &p, s + buf_len, &var_hash TSRMLS_CC)) {
+       if (!php_var_unserialize(&pmembers, &p, s + buf_len, &var_hash TSRMLS_CC) || Z_TYPE_P(pmembers) != IS_ARRAY) {
                zval_ptr_dtor(&pmembers);
                goto outexcept;
        }
index 57ddf492d1c2bf66a91d39bd1d15bd415538acac..f493154b20f25630ba944dd06f3683751bd9a269 100644 (file)
@@ -914,7 +914,7 @@ SPL_METHOD(SplObjectStorage, unserialize)
        ++p;
 
        ALLOC_INIT_ZVAL(pmembers);
-       if (!php_var_unserialize(&pmembers, &p, s + buf_len, &var_hash TSRMLS_CC)) {
+       if (!php_var_unserialize(&pmembers, &p, s + buf_len, &var_hash TSRMLS_CC) || Z_TYPE_P(pmembers) != IS_ARRAY) {
                zval_ptr_dtor(&pmembers);
                goto outexcept;
        }
index a525317093b63edce028caa01a66586c0e34ae33..8f0676de3b45332b04920ba8cec1e2cd31683cb6 100644 (file)
@@ -7,6 +7,7 @@ $badblobs = array(
 'x:i:2;i:0;,i:1;;i:0;,i:2;;m:a:0:{}',
 'x:i:3;O:8:"stdClass":0:{},O:8:"stdClass":0:{};R:2;,i:1;;O:8:"stdClass":0:{},r:2;;m:a:0:{}',
 'x:i:3;O:8:"stdClass":0:{},O:8:"stdClass":0:{};r:2;,i:1;;O:8:"stdClass":0:{},r:2;;m:a:0:{}',
+'x:i:1;O:8:"stdClass":0:{},N;;m:s:40:"1234567890123456789012345678901234567890"',
 );
 foreach($badblobs as $blob) {
 try {
@@ -17,6 +18,7 @@ try {
        echo $e->getMessage()."\n";
 }
 }
+echo "DONE\n";
 --EXPECTF--
 Error at offset 6 of 34 bytes
 Error at offset 46 of 89 bytes
@@ -42,4 +44,5 @@ object(SplObjectStorage)#2 (1) {
     }
   }
 }
-
+Error at offset 79 of 78 bytes
+DONE