From: Anatol Belski Date: Tue, 8 Nov 2016 11:16:39 +0000 (+0100) Subject: Merge branch 'PHP-5.6' into PHP-7.0 X-Git-Tag: php-7.1.0RC6~3^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e87daf363b5eb2965a2cb4dec5427a9b83ce88e2;p=php Merge branch 'PHP-5.6' into PHP-7.0 * PHP-5.6: fix memory leak --- e87daf363b5eb2965a2cb4dec5427a9b83ce88e2 diff --cc ext/wddx/wddx.c index e21d178edf,069ea122ce..b188e8929e --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@@ -940,31 -1000,34 +940,32 @@@ static void php_wddx_pop_element(void * if (ent1->varname) { if (!strcmp(ent1->varname, PHP_CLASS_NAME_VAR) && - Z_TYPE_P(ent1->data) == IS_STRING && Z_STRLEN_P(ent1->data) && - ent2->type == ST_STRUCT && Z_TYPE_P(ent2->data) == IS_ARRAY) { + Z_TYPE(ent1->data) == IS_STRING && Z_STRLEN(ent1->data) && + ent2->type == ST_STRUCT && Z_TYPE(ent2->data) == IS_ARRAY) { zend_bool incomplete_class = 0; - zend_str_tolower(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data)); - if (zend_hash_find(EG(class_table), Z_STRVAL_P(ent1->data), - Z_STRLEN_P(ent1->data)+1, (void **) &pce)==FAILURE) { + zend_str_tolower(Z_STRVAL(ent1->data), Z_STRLEN(ent1->data)); + zend_string_forget_hash_val(Z_STR(ent1->data)); + if ((pce = zend_hash_find_ptr(EG(class_table), Z_STR(ent1->data))) == NULL) { incomplete_class = 1; - pce = &PHP_IC_ENTRY; + pce = PHP_IC_ENTRY; } - if (pce != &PHP_IC_ENTRY && ((*pce)->serialize || (*pce)->unserialize)) { + if (pce != PHP_IC_ENTRY && (pce->serialize || pce->unserialize)) { + zval_ptr_dtor(&ent2->data); - ent2->data = NULL; - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Class %s can not be unserialized", Z_STRVAL_P(ent1->data)); + ZVAL_UNDEF(&ent2->data); + php_error_docref(NULL, E_WARNING, "Class %s can not be unserialized", Z_STRVAL(ent1->data)); } else { /* Initialize target object */ - MAKE_STD_ZVAL(obj); - object_init_ex(obj, *pce); + object_init_ex(&obj, pce); /* Merge current hashtable with object's default properties */ - zend_hash_merge(Z_OBJPROP_P(obj), - Z_ARRVAL_P(ent2->data), - (void (*)(void *)) zval_add_ref, - (void *) &tmp, sizeof(zval *), 0); + zend_hash_merge(Z_OBJPROP(obj), + Z_ARRVAL(ent2->data), + zval_add_ref, 0); if (incomplete_class) { - php_store_class_name(obj, Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data)); + php_store_class_name(&obj, Z_STRVAL(ent1->data), Z_STRLEN(ent1->data)); } /* Clean up old array entry */