dmitry Mon Jul 10 14:02:40 2006 UTC Added files: (Branch: PHP_5_2) /php-src/ext/standard/tests/serialize bug37947.phpt
Modified files: /php-src NEWS /php-src/ext/standard var.c Log: Fixed bug #37947 (zend_ptr_stack reallocation problem) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.115&r2=1.2027.2.547.2.116&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.115 php-src/NEWS:1.2027.2.547.2.116 --- php-src/NEWS:1.2027.2.547.2.115 Mon Jul 10 10:33:42 2006 +++ php-src/NEWS Mon Jul 10 14:02:40 2006 @@ -90,6 +90,7 @@ - Fixed bug #38003 (in classes inherited from MySQLi it's possible to call private constructors from invalid context). (Tony) - Fixed bug #37987 (invalid return of file_exists() in safe mode). (Ilia) +- Fixed bug #37947 (zend_ptr_stack reallocation problem). (Dmitry) - Fixed bug #37931 (possible crash in OCI8 after database restart when using persistent connections). (Tony) - Fixed bug #37920 (compilation problems on z/OS). (Tony) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var.c?r1=1.203.2.7.2.1&r2=1.203.2.7.2.2&diff_format=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.203.2.7.2.1 php-src/ext/standard/var.c:1.203.2.7.2.2 --- php-src/ext/standard/var.c:1.203.2.7.2.1 Tue May 30 14:51:20 2006 +++ php-src/ext/standard/var.c Mon Jul 10 14:02:40 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var.c,v 1.203.2.7.2.1 2006/05/30 14:51:20 iliaa Exp $ */ +/* $Id: var.c,v 1.203.2.7.2.2 2006/07/10 14:02:40 dmitry Exp $ */ @@ -881,32 +881,28 @@ PHP_FUNCTION(unserialize) { - zval **buf; + char *buf; + int buf_len; + const unsigned char *p; php_unserialize_data_t var_hash; - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &buf) == FAILURE) { - WRONG_PARAM_COUNT; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) { + RETURN_FALSE; } - if (Z_TYPE_PP(buf) == IS_STRING) { - const unsigned char *p = (unsigned char*)Z_STRVAL_PP(buf); - - if (Z_STRLEN_PP(buf) == 0) { - RETURN_FALSE; - } + if (buf_len == 0) { + RETURN_FALSE; + } - PHP_VAR_UNSERIALIZE_INIT(var_hash); - if (!php_var_unserialize(&return_value, &p, p + Z_STRLEN_PP(buf), &var_hash TSRMLS_CC)) { - PHP_VAR_UNSERIALIZE_DESTROY(var_hash); - zval_dtor(return_value); - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - Z_STRVAL_PP(buf)), Z_STRLEN_PP(buf)); - RETURN_FALSE; - } + p = (const unsigned char*)buf; + PHP_VAR_UNSERIALIZE_INIT(var_hash); + if (!php_var_unserialize(&return_value, &p, p + buf_len, &var_hash TSRMLS_CC)) { PHP_VAR_UNSERIALIZE_DESTROY(var_hash); - } else { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Argument is not a string"); + zval_dtor(return_value); + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - buf), buf_len); RETURN_FALSE; } + PHP_VAR_UNSERIALIZE_DESTROY(var_hash); } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/bug37947.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/serialize/bug37947.phpt +++ php-src/ext/standard/tests/serialize/bug37947.phpt -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php