From: Xinchen Hui Date: Tue, 25 Feb 2014 09:58:01 +0000 (+0800) Subject: Fixed test fail in ext/standard/tests/serialize/bug64354_1.php X-Git-Tag: POST_PHPNG_MERGE~412^2~533^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=595741f6ece88c79d368a20c14786268a8e35434;p=php Fixed test fail in ext/standard/tests/serialize/bug64354_1.php --- diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 26f39eb513..002820b6fc 100644 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -394,14 +394,16 @@ typedef struct { zend_class_entry *ce; } autoload_func_info; -static void autoload_func_info_dtor(autoload_func_info *alfi) +static void autoload_func_info_dtor(zval *element) { + autoload_func_info *alfi = (autoload_func_info*)Z_PTR_P(element); if (alfi->obj) { zval_ptr_dtor(alfi->obj); } if (alfi->closure) { zval_ptr_dtor(alfi->closure); } + efree(alfi); } /* {{{ proto void spl_autoload_call(string class_name) @@ -553,10 +555,9 @@ PHP_FUNCTION(spl_autoload_register) alfi.closure = zcallable; Z_ADDREF_P(zcallable); - lc_name = STR_ALLOC(func_name_len + 2 + sizeof(zend_uint), 0); + lc_name = STR_ALLOC(func_name_len + sizeof(zend_uint), 0); zend_str_tolower_copy(lc_name->val, func_name, func_name_len); memcpy(lc_name->val + func_name_len, &Z_OBJ_HANDLE_P(zcallable), sizeof(zend_uint)); - lc_name->len += sizeof(zend_uint); lc_name->val[lc_name->len] = '\0'; } else { lc_name = STR_ALLOC(func_name_len, 0); @@ -597,14 +598,14 @@ PHP_FUNCTION(spl_autoload_register) spl_alfi.ce = NULL; spl_alfi.closure = NULL; zend_hash_str_add_mem(SPL_G(autoload_functions), "spl_autoload", sizeof("spl_autoload") - 1, - (void *)&spl_alfi, sizeof(autoload_func_info)); + &spl_alfi, sizeof(autoload_func_info)); if (prepend && SPL_G(autoload_functions)->nNumOfElements > 1) { /* Move the newly created element to the head of the hashtable */ HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions)); } } - if (zend_hash_add_mem(SPL_G(autoload_functions), lc_name, &alfi.func_ptr, sizeof(autoload_func_info)) == NULL) { + if (zend_hash_add_mem(SPL_G(autoload_functions), lc_name, &alfi, sizeof(autoload_func_info)) == NULL) { if (obj_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) { Z_DELREF_P(alfi.obj); } diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c index 8c005a5fa6..90502dc1f1 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c @@ -306,7 +306,6 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) { zval_dtor(&key); - zval_dtor(&data); return 0; } @@ -445,7 +444,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER) -#line 449 "ext/standard/var_unserializer.c" +#line 448 "ext/standard/var_unserializer.c" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -505,9 +504,9 @@ yy2: yych = *(YYMARKER = ++YYCURSOR); if (yych == ':') goto yy95; yy3: -#line 786 "ext/standard/var_unserializer.re" +#line 785 "ext/standard/var_unserializer.re" { return 0; } -#line 511 "ext/standard/var_unserializer.c" +#line 510 "ext/standard/var_unserializer.c" yy4: yych = *(YYMARKER = ++YYCURSOR); if (yych == ':') goto yy89; @@ -550,13 +549,13 @@ yy13: goto yy3; yy14: ++YYCURSOR; -#line 780 "ext/standard/var_unserializer.re" +#line 779 "ext/standard/var_unserializer.re" { /* this is the case where we have less data than planned */ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data"); return 0; /* not sure if it should be 0 or 1 here? */ } -#line 560 "ext/standard/var_unserializer.c" +#line 559 "ext/standard/var_unserializer.c" yy16: yych = *++YYCURSOR; goto yy3; @@ -586,7 +585,7 @@ yy20: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 641 "ext/standard/var_unserializer.re" +#line 640 "ext/standard/var_unserializer.re" { size_t len, len2, len3, maxlen; long elements; @@ -725,7 +724,7 @@ yy20: return object_common2(UNSERIALIZE_PASSTHRU, elements); } -#line 729 "ext/standard/var_unserializer.c" +#line 728 "ext/standard/var_unserializer.c" yy25: yych = *++YYCURSOR; if (yych <= ',') { @@ -750,7 +749,7 @@ yy27: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 633 "ext/standard/var_unserializer.re" +#line 632 "ext/standard/var_unserializer.re" { //??? INIT_PZVAL(rval); @@ -758,7 +757,7 @@ yy27: return object_common2(UNSERIALIZE_PASSTHRU, object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR)); } -#line 762 "ext/standard/var_unserializer.c" +#line 761 "ext/standard/var_unserializer.c" yy32: yych = *++YYCURSOR; if (yych == '+') goto yy33; @@ -779,7 +778,7 @@ yy34: yych = *++YYCURSOR; if (yych != '{') goto yy18; ++YYCURSOR; -#line 615 "ext/standard/var_unserializer.re" +#line 614 "ext/standard/var_unserializer.re" { long elements = parse_iv(start + 2); /* use iv() not uiv() in order to check data range */ @@ -797,7 +796,7 @@ yy34: return finish_nested_data(UNSERIALIZE_PASSTHRU); } -#line 801 "ext/standard/var_unserializer.c" +#line 800 "ext/standard/var_unserializer.c" yy39: yych = *++YYCURSOR; if (yych == '+') goto yy40; @@ -818,7 +817,7 @@ yy41: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 586 "ext/standard/var_unserializer.re" +#line 585 "ext/standard/var_unserializer.re" { size_t len, maxlen; char *str; @@ -847,7 +846,7 @@ yy41: ZVAL_STRINGL(rval, str, len); return 1; } -#line 851 "ext/standard/var_unserializer.c" +#line 850 "ext/standard/var_unserializer.c" yy46: yych = *++YYCURSOR; if (yych == '+') goto yy47; @@ -868,7 +867,7 @@ yy48: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 559 "ext/standard/var_unserializer.re" +#line 558 "ext/standard/var_unserializer.re" { size_t len, maxlen; char *str; @@ -895,7 +894,7 @@ yy48: ZVAL_STRINGL(rval, str, len); return 1; } -#line 899 "ext/standard/var_unserializer.c" +#line 898 "ext/standard/var_unserializer.c" yy53: yych = *++YYCURSOR; if (yych <= '/') { @@ -983,7 +982,7 @@ yy61: } yy63: ++YYCURSOR; -#line 550 "ext/standard/var_unserializer.re" +#line 549 "ext/standard/var_unserializer.re" { #if SIZEOF_LONG == 4 use_double: @@ -992,7 +991,7 @@ use_double: ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL)); return 1; } -#line 996 "ext/standard/var_unserializer.c" +#line 995 "ext/standard/var_unserializer.c" yy65: yych = *++YYCURSOR; if (yych <= ',') { @@ -1051,7 +1050,7 @@ yy73: yych = *++YYCURSOR; if (yych != ';') goto yy18; ++YYCURSOR; -#line 534 "ext/standard/var_unserializer.re" +#line 533 "ext/standard/var_unserializer.re" { *p = YYCURSOR; @@ -1067,7 +1066,7 @@ yy73: return 1; } -#line 1071 "ext/standard/var_unserializer.c" +#line 1070 "ext/standard/var_unserializer.c" yy76: yych = *++YYCURSOR; if (yych == 'N') goto yy73; @@ -1094,7 +1093,7 @@ yy79: if (yych <= '9') goto yy79; if (yych != ';') goto yy18; ++YYCURSOR; -#line 508 "ext/standard/var_unserializer.re" +#line 507 "ext/standard/var_unserializer.re" { #if SIZEOF_LONG == 4 int digits = YYCURSOR - start - 3; @@ -1120,7 +1119,7 @@ yy79: ZVAL_LONG(rval, parse_iv(start + 2)); return 1; } -#line 1124 "ext/standard/var_unserializer.c" +#line 1123 "ext/standard/var_unserializer.c" yy83: yych = *++YYCURSOR; if (yych <= '/') goto yy18; @@ -1128,22 +1127,22 @@ yy83: yych = *++YYCURSOR; if (yych != ';') goto yy18; ++YYCURSOR; -#line 502 "ext/standard/var_unserializer.re" +#line 501 "ext/standard/var_unserializer.re" { *p = YYCURSOR; ZVAL_BOOL(rval, parse_iv(start + 2)); return 1; } -#line 1138 "ext/standard/var_unserializer.c" +#line 1137 "ext/standard/var_unserializer.c" yy87: ++YYCURSOR; -#line 496 "ext/standard/var_unserializer.re" +#line 495 "ext/standard/var_unserializer.re" { *p = YYCURSOR; ZVAL_NULL(rval); return 1; } -#line 1147 "ext/standard/var_unserializer.c" +#line 1146 "ext/standard/var_unserializer.c" yy89: yych = *++YYCURSOR; if (yych <= ',') { @@ -1166,7 +1165,7 @@ yy91: if (yych <= '9') goto yy91; if (yych != ';') goto yy18; ++YYCURSOR; -#line 473 "ext/standard/var_unserializer.re" +#line 472 "ext/standard/var_unserializer.re" { long id; @@ -1189,7 +1188,7 @@ yy91: return 1; } -#line 1193 "ext/standard/var_unserializer.c" +#line 1192 "ext/standard/var_unserializer.c" yy95: yych = *++YYCURSOR; if (yych <= ',') { @@ -1212,7 +1211,7 @@ yy97: if (yych <= '9') goto yy97; if (yych != ';') goto yy18; ++YYCURSOR; -#line 453 "ext/standard/var_unserializer.re" +#line 452 "ext/standard/var_unserializer.re" { long id; @@ -1232,9 +1231,9 @@ yy97: return 1; } -#line 1236 "ext/standard/var_unserializer.c" +#line 1235 "ext/standard/var_unserializer.c" } -#line 788 "ext/standard/var_unserializer.re" +#line 787 "ext/standard/var_unserializer.re" return 0; diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index 68a2236610..6e644905dc 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -310,7 +310,6 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) { zval_dtor(&key); - zval_dtor(&data); return 0; }