[prev in list] [next in list] [prev in thread] [next in thread]
List: php-cvs
Subject: [PHP-CVS] =?utf-8?q?svn:_/php/php-src/_branches/PHP=5F5=5F2/NEWS_branches/PHP=5F5=5F2/ext/spl/SplObj
From: Stanislav_Malyshev <stas () php ! net>
Date: 2010-06-29 0:58:31
Message-ID: svn-stas-1277773111-300843-404482893 () svn ! php ! net
[Download RAW message or body]
stas Tue, 29 Jun 2010 00:58:31 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=300843
Log:
fix SplObjectStorage unserialization (CVE-2010-2225)
Changed paths:
U php/php-src/branches/PHP_5_2/NEWS
A php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_bad.phpt
A php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_nested.phpt
U php/php-src/branches/PHP_5_2/ext/spl/spl_observer.c
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/ext/spl/spl_observer.c
A php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
A php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
U php/php-src/branches/PHP_5_3/ext/standard/php_var.h
U php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.c
U php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.re
U php/php-src/trunk/ext/spl/spl_observer.c
A php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
A php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
U php/php-src/trunk/ext/standard/php_var.h
U php/php-src/trunk/ext/standard/var_unserializer.c
U php/php-src/trunk/ext/standard/var_unserializer.re
["svn-diffs-300843.txt" (text/x-diff)]
Modified: php/php-src/branches/PHP_5_2/NEWS
===================================================================
--- php/php-src/branches/PHP_5_2/NEWS 2010-06-29 00:57:58 UTC (rev 300842)
+++ php/php-src/branches/PHP_5_2/NEWS 2010-06-29 00:58:31 UTC (rev 300843)
@@ -1,6 +1,8 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? Jun 2010, PHP 5.2.14
+- Fixed SplObjectStorage unserialization problems (CVE-2010-2225). (Stas)
+
- Fixed bug #52163 (SplFileObject::fgetss() fails due to parameter that can't
be set). (Felipe)
- Fixed bug #52162 (custom request header variables with numbers are removed).
Added: php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_bad.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_bad.phpt \
(rev 0)
+++ php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_bad.phpt 2010-06-29 \
00:58:31 UTC (rev 300843) @@ -0,0 +1,24 @@
+--TEST--
+SPL: Test that serialized blob contains unique elements (CVE-2010-2225)
+--FILE--
+<?php
+
+$badblobs = array(
+'x:i:2;i:0;;i:0;;m:a:0:{}',
+'x:i:2;O:8:"stdClass":0:{};R:1;;m:a:0:{}',
+'x:i:3;O:8:"stdClass":0:{};r:1;;r:1;;m:a:0:{}',
+);
+foreach($badblobs as $blob) {
+try {
+ $so = new SplObjectStorage();
+ $so->unserialize($blob);
+ var_dump($so);
+} catch(UnexpectedValueException $e) {
+ echo $e->getMessage()."\n";
+}
+}
+--EXPECTF--
+Error at offset 6 of 24 bytes
+Error at offset 26 of 39 bytes
+object(SplObjectStorage)#2 (0) {
+}
Added: php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_nested.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_nested.phpt \
(rev 0)
+++ php/php-src/branches/PHP_5_2/ext/spl/SplObjectStorage_unserialize_nested.phpt 2010-06-29 \
00:58:31 UTC (rev 300843) @@ -0,0 +1,33 @@
+--TEST--
+SPL: Test unserializing tested & linked storage
+--FILE--
+<?php
+$o = new StdClass();
+$a = new StdClass();
+
+$o->a = $a;
+
+$so = new SplObjectStorage();
+
+$so->attach($o);
+$so->attach($a);
+
+$s = serialize($so);
+echo $s."\n";
+
+$so1 = unserialize($s);
+var_dump($so1);
+foreach($so1 as $obj) {
+ var_dump($obj);
+}
+--EXPECTF--
+C:16:"SplObjectStorage":66:{x:i:2;O:8:"stdClass":1:{s:1:"a";O:8:"stdClass":0:{}};r:2;;m:a:0:{}}
+object(SplObjectStorage)#4 (0) {
+}
+object(stdClass)#5 (1) {
+ ["a"]=>
+ object(stdClass)#6 (0) {
+ }
+}
+object(stdClass)#6 (0) {
+}
Modified: php/php-src/branches/PHP_5_2/ext/spl/spl_observer.c
===================================================================
--- php/php-src/branches/PHP_5_2/ext/spl/spl_observer.c 2010-06-29 00:57:58 UTC (rev \
300842)
+++ php/php-src/branches/PHP_5_2/ext/spl/spl_observer.c 2010-06-29 00:58:31 UTC (rev \
300843) @@ -182,6 +182,21 @@
intern->index = 0;
} /* }}} */
+int spl_object_storage_contains(spl_SplObjectStorage *intern, zval *obj TSRMLS_DC) \
/* {{{ */ +{
+#if HAVE_PACKED_OBJECT_VALUE
+ return zend_hash_exists(&intern->storage, (char*)&Z_OBJVAL_P(obj), \
sizeof(zend_object_value)); +#else
+ {
+ zend_object_value zvalue;
+ memset(&zvalue, 0, sizeof(zend_object_value));
+ zvalue.handle = Z_OBJ_HANDLE_P(obj);
+ zvalue.handlers = Z_OBJ_HT_P(obj);
+ return zend_hash_exists(&intern->storage, (char*)&zvalue, \
sizeof(zend_object_value)); + }
+#endif
+} /* }}} */
+
/* {{{ proto bool SplObjectStorage::contains($obj)
Determine whethe an object is contained in the storage */
SPL_METHOD(SplObjectStorage, contains)
@@ -193,17 +208,7 @@
return;
}
-#if HAVE_PACKED_OBJECT_VALUE
- RETURN_BOOL(zend_hash_exists(&intern->storage, (char*)&Z_OBJVAL_P(obj), \
sizeof(zend_object_value)));
-#else
- {
- zend_object_value zvalue;
- memset(&zvalue, 0, sizeof(zend_object_value));
- zvalue.handle = Z_OBJ_HANDLE_P(obj);
- zvalue.handlers = Z_OBJ_HT_P(obj);
- RETURN_BOOL(zend_hash_exists(&intern->storage, (char*)&zvalue, \
sizeof(zend_object_value)));
- }
-#endif
+ RETURN_BOOL(spl_object_storage_contains(intern, obj TSRMLS_CC));
} /* }}} */
/* {{{ proto int SplObjectStorage::count()
@@ -362,11 +367,22 @@
goto outexcept;
}
++p;
+ if(*p != 'O' && *p != 'C' && *p != 'r') {
+ goto outexcept;
+ }
ALLOC_INIT_ZVAL(pentry);
if (!php_var_unserialize(&pentry, &p, s + buf_len, &var_hash TSRMLS_CC)) {
zval_ptr_dtor(&pentry);
goto outexcept;
}
+ if(Z_TYPE_P(pentry) != IS_OBJECT) {
+ zval_ptr_dtor(&pentry);
+ goto outexcept;
+ }
+ if(spl_object_storage_contains(intern, pentry TSRMLS_CC)) {
+ zval_ptr_dtor(&pentry);
+ continue;
+ }
spl_object_storage_attach(intern, pentry TSRMLS_CC);
zval_ptr_dtor(&pentry);
}
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2010-06-29 00:57:58 UTC (rev 300842)
+++ php/php-src/branches/PHP_5_3/NEWS 2010-06-29 00:58:31 UTC (rev 300843)
@@ -1,6 +1,8 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2010, PHP 5.3.3 RC2
+- Fixed SplObjectStorage unserialization problems (CVE-2010-2225). (Stas)
+
- Implemented FR #51295 (SQLite3::busyTimeout not existing). (Mark)
- Fixed the mail.log ini setting when no filename was given. (Johannes)
Modified: php/php-src/branches/PHP_5_3/ext/spl/spl_observer.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/spl/spl_observer.c 2010-06-29 00:57:58 UTC (rev \
300842)
+++ php/php-src/branches/PHP_5_3/ext/spl/spl_observer.c 2010-06-29 00:58:31 UTC (rev \
300843) @@ -115,6 +115,7 @@
zval_ptr_dtor(&element->inf);
} /* }}} */
+
spl_SplObjectStorageElement* spl_object_storage_get(spl_SplObjectStorage *intern, \
zval *obj TSRMLS_DC) /* {{{ */ {
spl_SplObjectStorageElement *element;
@@ -632,15 +633,24 @@
zval_ptr_dtor(&pcount);
while(count-- > 0) {
+ spl_SplObjectStorageElement *pelement;
+
if (*p != ';') {
goto outexcept;
}
++p;
+ if(*p != 'O' && *p != 'C' && *p != 'r') {
+ goto outexcept;
+ }
ALLOC_INIT_ZVAL(pentry);
if (!php_var_unserialize(&pentry, &p, s + buf_len, &var_hash TSRMLS_CC)) {
zval_ptr_dtor(&pentry);
goto outexcept;
}
+ if(Z_TYPE_P(pentry) != IS_OBJECT) {
+ zval_ptr_dtor(&pentry);
+ goto outexcept;
+ }
ALLOC_INIT_ZVAL(pinf);
if (*p == ',') { /* new version has inf */
++p;
@@ -649,6 +659,16 @@
goto outexcept;
}
}
+
+ pelement = spl_object_storage_get(intern, pentry TSRMLS_CC);
+ if(pelement) {
+ if(pelement->inf) {
+ var_push_dtor(&var_hash, &pelement->inf);
+ }
+ if(pelement->obj) {
+ var_push_dtor(&var_hash, &pelement->obj);
+ }
+ }
spl_object_storage_attach(intern, pentry, pinf TSRMLS_CC);
zval_ptr_dtor(&pentry);
zval_ptr_dtor(&pinf);
Added: php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt \
(rev 0)
+++ php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt 2010-06-29 \
00:58:31 UTC (rev 300843) @@ -0,0 +1,45 @@
+--TEST--
+SPL: Test that serialized blob contains unique elements (CVE-2010-2225)
+--FILE--
+<?php
+
+$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:1;,i:1;;O:8:"stdClass":0:{},r:2;;m:a:0:{}',
+'x:i:3;O:8:"stdClass":0:{},O:8:"stdClass":0:{};r:1;,i:1;;O:8:"stdClass":0:{},r:2;;m:a:0:{}',
+);
+foreach($badblobs as $blob) {
+try {
+ $so = new SplObjectStorage();
+ $so->unserialize($blob);
+ var_dump($so);
+} catch(UnexpectedValueException $e) {
+ echo $e->getMessage()."\n";
+}
+}
+--EXPECTF--
+Error at offset 6 of 34 bytes
+Error at offset 46 of 89 bytes
+object(SplObjectStorage)#2 (1) {
+ ["storage":"SplObjectStorage":private]=>
+ array(2) {
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#3 (0) {
+ }
+ ["inf"]=>
+ int(1)
+ }
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#1 (0) {
+ }
+ ["inf"]=>
+ object(stdClass)#4 (0) {
+ }
+ }
+ }
+}
+
Added: php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt \
(rev 0)
+++ php/php-src/branches/PHP_5_3/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt 2010-06-29 \
00:58:31 UTC (rev 300843) @@ -0,0 +1,47 @@
+--TEST--
+SPL: Test unserializing tested & linked storage
+--FILE--
+<?php
+$o = new StdClass();
+$a = new StdClass();
+
+$o->a = $a;
+
+$so = new SplObjectStorage();
+
+$so[$o] = 1;
+$so[$a] = 2;
+
+$s = serialize($so);
+echo $s."\n";
+
+$so1 = unserialize($s);
+var_dump($so1);
+
+--EXPECTF--
+C:16:"SplObjectStorage":76:{x:i:2;O:8:"stdClass":1:{s:1:"a";O:8:"stdClass":0:{}},i:1;;r:2;,i:2;;m:a:0:{}}
+object(SplObjectStorage)#4 (1) {
+ ["storage":"SplObjectStorage":private]=>
+ array(2) {
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#5 (1) {
+ ["a"]=>
+ object(stdClass)#6 (0) {
+ }
+ }
+ ["inf"]=>
+ int(1)
+ }
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#6 (0) {
+ }
+ ["inf"]=>
+ int(2)
+ }
+ }
+}
+
Modified: php/php-src/branches/PHP_5_3/ext/standard/php_var.h
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/php_var.h 2010-06-29 00:57:58 UTC (rev \
300842)
+++ php/php-src/branches/PHP_5_3/ext/standard/php_var.h 2010-06-29 00:58:31 UTC (rev \
300843) @@ -60,6 +60,7 @@
var_destroy(&(var_hash))
PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval \
**nzval); +PHPAPI void var_push_dtor(php_unserialize_data_t *var_hash, zval **val);
PHPAPI void var_destroy(php_unserialize_data_t *var_hash);
#define PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash, ozval, nzval) \
Modified: php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.c 2010-06-29 00:57:58 \
UTC (rev 300842)
+++ php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.c 2010-06-29 00:58:31 \
UTC (rev 300843) @@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Mon Apr 12 10:11:22 2010 */
+/* Generated by re2c 0.13.5 on Fri Jun 25 15:36:31 2010 */
#line 1 "ext/standard/var_unserializer.re"
/*
+----------------------------------------------------------------------+
@@ -56,7 +56,7 @@
var_hash->data[var_hash->used_slots++] = *rval;
}
-static inline void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
+PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
{
var_entries *var_hash = var_hashx->first_dtor, *prev = NULL;
Modified: php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.re
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.re 2010-06-29 00:57:58 \
UTC (rev 300842)
+++ php/php-src/branches/PHP_5_3/ext/standard/var_unserializer.re 2010-06-29 00:58:31 \
UTC (rev 300843) @@ -54,7 +54,7 @@
var_hash->data[var_hash->used_slots++] = *rval;
}
-static inline void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
+PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
{
var_entries *var_hash = var_hashx->first_dtor, *prev = NULL;
Modified: php/php-src/trunk/ext/spl/spl_observer.c
===================================================================
--- php/php-src/trunk/ext/spl/spl_observer.c 2010-06-29 00:57:58 UTC (rev 300842)
+++ php/php-src/trunk/ext/spl/spl_observer.c 2010-06-29 00:58:31 UTC (rev 300843)
@@ -728,15 +728,26 @@
zval_ptr_dtor(&pcount);
while(count-- > 0) {
+ spl_SplObjectStorageElement *pelement;
+ char *hash;
+ int hash_len;
+
if (*p != ';') {
goto outexcept;
}
++p;
+ if(*p != 'O' && *p != 'C' && *p != 'r') {
+ goto outexcept;
+ }
ALLOC_INIT_ZVAL(pentry);
if (!php_var_unserialize(&pentry, &p, s + buf_len, &var_hash TSRMLS_CC)) {
zval_ptr_dtor(&pentry);
goto outexcept;
}
+ if(Z_TYPE_P(pentry) != IS_OBJECT) {
+ zval_ptr_dtor(&pentry);
+ goto outexcept;
+ }
ALLOC_INIT_ZVAL(pinf);
if (*p == ',') { /* new version has inf */
++p;
@@ -745,6 +756,23 @@
goto outexcept;
}
}
+
+ hash = spl_object_storage_get_hash(intern, getThis(), pentry, &hash_len \
TSRMLS_CC); + if (!hash) {
+ zval_ptr_dtor(&pentry);
+ zval_ptr_dtor(&pinf);
+ goto outexcept;
+ }
+ pelement = spl_object_storage_get(intern, hash, hash_len TSRMLS_CC);
+ spl_object_storage_free_hash(intern, hash);
+ if(pelement) {
+ if(pelement->inf) {
+ var_push_dtor(&var_hash, &pelement->inf);
+ }
+ if(pelement->obj) {
+ var_push_dtor(&var_hash, &pelement->obj);
+ }
+ }
spl_object_storage_attach(intern, getThis(), pentry, pinf TSRMLS_CC);
zval_ptr_dtor(&pentry);
zval_ptr_dtor(&pinf);
Added: php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
===================================================================
--- php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt \
(rev 0)
+++ php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt 2010-06-29 \
00:58:31 UTC (rev 300843) @@ -0,0 +1,45 @@
+--TEST--
+SPL: Test that serialized blob contains unique elements (CVE-2010-2225)
+--FILE--
+<?php
+
+$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:1;,i:1;;O:8:"stdClass":0:{},r:2;;m:a:0:{}',
+'x:i:3;O:8:"stdClass":0:{},O:8:"stdClass":0:{};r:1;,i:1;;O:8:"stdClass":0:{},r:2;;m:a:0:{}',
+);
+foreach($badblobs as $blob) {
+try {
+ $so = new SplObjectStorage();
+ $so->unserialize($blob);
+ var_dump($so);
+} catch(UnexpectedValueException $e) {
+ echo $e->getMessage()."\n";
+}
+}
+--EXPECTF--
+Error at offset 6 of 34 bytes
+Error at offset 46 of 89 bytes
+object(SplObjectStorage)#2 (1) {
+ ["storage":"SplObjectStorage":private]=>
+ array(2) {
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#3 (0) {
+ }
+ ["inf"]=>
+ int(1)
+ }
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#1 (0) {
+ }
+ ["inf"]=>
+ object(stdClass)#3 (0) {
+ }
+ }
+ }
+}
+
Added: php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
===================================================================
--- php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt \
(rev 0)
+++ php/php-src/trunk/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt 2010-06-29 \
00:58:31 UTC (rev 300843) @@ -0,0 +1,47 @@
+--TEST--
+SPL: Test unserializing tested & linked storage
+--FILE--
+<?php
+$o = new StdClass();
+$a = new StdClass();
+
+$o->a = $a;
+
+$so = new SplObjectStorage();
+
+$so[$o] = 1;
+$so[$a] = 2;
+
+$s = serialize($so);
+echo $s."\n";
+
+$so1 = unserialize($s);
+var_dump($so1);
+
+--EXPECTF--
+C:16:"SplObjectStorage":76:{x:i:2;O:8:"stdClass":1:{s:1:"a";O:8:"stdClass":0:{}},i:1;;r:4;,i:2;;m:a:0:{}}
+object(SplObjectStorage)#4 (1) {
+ ["storage":"SplObjectStorage":private]=>
+ array(2) {
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#5 (1) {
+ ["a"]=>
+ object(stdClass)#6 (0) {
+ }
+ }
+ ["inf"]=>
+ int(1)
+ }
+ ["%s"]=>
+ array(2) {
+ ["obj"]=>
+ object(stdClass)#6 (0) {
+ }
+ ["inf"]=>
+ int(2)
+ }
+ }
+}
+
Modified: php/php-src/trunk/ext/standard/php_var.h
===================================================================
--- php/php-src/trunk/ext/standard/php_var.h 2010-06-29 00:57:58 UTC (rev 300842)
+++ php/php-src/trunk/ext/standard/php_var.h 2010-06-29 00:58:31 UTC (rev 300843)
@@ -100,6 +100,7 @@
} while (0)
PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval \
**nzval); +PHPAPI void var_push_dtor(php_unserialize_data_t *var_hash, zval **val);
PHPAPI void var_destroy(php_unserialize_data_t *var_hash);
#define PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash, ozval, nzval) \
Modified: php/php-src/trunk/ext/standard/var_unserializer.c
===================================================================
--- php/php-src/trunk/ext/standard/var_unserializer.c 2010-06-29 00:57:58 UTC (rev \
300842)
+++ php/php-src/trunk/ext/standard/var_unserializer.c 2010-06-29 00:58:31 UTC (rev \
300843) @@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Mon Jun 14 12:03:55 2010 */
+/* Generated by re2c 0.13.5 on Mon Jun 28 13:40:53 2010 */
#line 1 "ext/standard/var_unserializer.re"
/*
+----------------------------------------------------------------------+
@@ -59,7 +59,7 @@
var_hash->data[var_hash->used_slots++] = *rval;
}
-static inline void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
+PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
{
var_entries *var_hash = (*var_hashx)->first_dtor, *prev = NULL;
#if 0
Modified: php/php-src/trunk/ext/standard/var_unserializer.re
===================================================================
--- php/php-src/trunk/ext/standard/var_unserializer.re 2010-06-29 00:57:58 UTC (rev \
300842)
+++ php/php-src/trunk/ext/standard/var_unserializer.re 2010-06-29 00:58:31 UTC (rev \
300843) @@ -57,7 +57,7 @@
var_hash->data[var_hash->used_slots++] = *rval;
}
-static inline void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
+PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
{
var_entries *var_hash = (*var_hashx)->first_dtor, *prev = NULL;
#if 0
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic