X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_querystring.c;h=d2657484668ade531a876860c51354707e06a99e;hp=15a000b8cd434859810757d1ab3db53734679080;hb=4a975fc65c1885c505cb1271411cef14724caf4c;hpb=789f8205b16e89ce1982e4d492c7406e8ff66271 diff --git a/php_http_querystring.c b/php_http_querystring.c index 15a000b..d265748 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); }