com php-src: Fixed reference handling: ext/wddx/wddx.c

From: Date: Mon, 12 May 2014 03:39:55 +0000
Subject: com php-src: Fixed reference handling: ext/wddx/wddx.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-78262@lists.php.net to get a copy of this message
Commit: b2b508a2796da04e6a07441d3a62f0cf24340abc Author: Xinchen Hui <laruence@php.net> Mon, 12 May 2014 11:39:55 +0800 Parents: fca5af618fa4fe42079d6c2fdc9e1da25af6488b Branches: phpng Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b2b508a2796da04e6a07441d3a62f0cf24340abc Log: Fixed reference handling Changed paths: M ext/wddx/wddx.c Diff: diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c index 18fd70b..f383603 100644 --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@ -680,6 +680,7 @@ static void php_wddx_add_var(wddx_packet *packet, zval *name_var) target_hash->u.v.nApplyCount++; } + ZVAL_DEREF(val); php_wddx_add_var(packet, val); if (is_array) { @@ -906,6 +907,7 @@ static void php_wddx_pop_element(void *user_data, const XML_Char *name) zend_bool incomplete_class = 0; zend_str_tolower(Z_STRVAL(ent1->data), Z_STRLEN(ent1->data)); + STR_FORGET_HASH_VAL(Z_STR(ent1->data)); if ((pce = zend_hash_find(EG(class_table), Z_STR(ent1->data))) == NULL) { incomplete_class = 1; pce = PHP_IC_ENTRY; @@ -1101,14 +1103,21 @@ PHP_FUNCTION(wddx_serialize_vars) php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); for (i=0; i<num_args; i++) { - if (Z_TYPE(args[i]) != IS_ARRAY && Z_TYPE(args[i]) != IS_OBJECT) { - convert_to_string_ex(&args[i]); + zval *arg; + if (!Z_ISREF(args[i])) { + arg = &args[i]; + } else { + arg = Z_REFVAL(args[i]); + } + if (Z_TYPE_P(arg) != IS_ARRAY && Z_TYPE_P(arg) != IS_OBJECT) { + convert_to_string_ex(arg); } - php_wddx_add_var(packet, &args[i]); + php_wddx_add_var(packet, arg); } php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); php_wddx_packet_end(packet); + smart_str_0(packet); RETVAL_STR(STR_COPY(packet->s)); php_wddx_destructor(packet); @@ -1204,10 +1213,16 @@ PHP_FUNCTION(wddx_add_vars) } for (i=0; i<num_args; i++) { - if (Z_TYPE(args[i]) != IS_ARRAY && Z_TYPE(args[i]) != IS_OBJECT) { - convert_to_string_ex(&args[i]); + zval *arg; + if (!Z_ISREF(args[i])) { + arg = &args[i]; + } else { + arg = Z_REFVAL(args[i]); + } + if (Z_TYPE_P(arg) != IS_ARRAY && Z_TYPE_P(arg) != IS_OBJECT) { + convert_to_string_ex(arg); } - php_wddx_add_var(packet, &args[i]); + php_wddx_add_var(packet, arg); } RETURN_TRUE;

« previous php.cvs (#78262) next »