X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_querystring.c;h=f2164fb56ab7d860bdff9510a572f2bad111c605;hp=933529f628062d3a8d5e09f1b548e80490269c44;hb=b62c3811cac715f7a0e668ee864d57fd730b47b3;hpb=1203e8a9facfbe8f2dbdcc7fada98b01f79f7555 diff --git a/php_http_querystring.c b/php_http_querystring.c index 933529f..f2164fb 100644 --- a/php_http_querystring.c +++ b/php_http_querystring.c @@ -606,11 +606,19 @@ PHP_METHOD(HttpQueryString, offsetSet) return; } - MAKE_STD_ZVAL(param); - array_init(param); - Z_ADDREF_P(value); - add_assoc_zval_ex(param, offset_str, offset_len + 1, value); - php_http_querystring_set(getThis(), param, 0 TSRMLS_CC); + param = zend_read_property(php_http_querystring_class_entry, getThis(), ZEND_STRL("queryArray"), 0 TSRMLS_CC); + + if (Z_TYPE_P(param) == IS_ARRAY && zend_symtable_exists(Z_ARRVAL_P(param), offset_str, offset_len + 1)) { + Z_ADDREF_P(value); + zend_symtable_update(Z_ARRVAL_P(param), offset_str, offset_len + 1, (void *) &value, sizeof(zval *), NULL); + Z_ADDREF_P(param); + } else { + MAKE_STD_ZVAL(param); + array_init(param); + Z_ADDREF_P(value); + add_assoc_zval_ex(param, offset_str, offset_len + 1, value); + } + php_http_querystring_set(getThis(), param, QS_MERGE TSRMLS_CC); zval_ptr_dtor(¶m); }