From: Michael Wallner Date: Tue, 3 Mar 2015 20:57:03 +0000 (+0100) Subject: fis querystring offset set bug X-Git-Tag: RELEASE_2_4_0~3 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=4a975fc65c1885c505cb1271411cef14724caf4c;ds=sidebyside fis querystring offset set bug --- 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); } diff --git a/tests/querystring003.phpt b/tests/querystring003.phpt new file mode 100644 index 0000000..a504174 --- /dev/null +++ b/tests/querystring003.phpt @@ -0,0 +1,22 @@ +--TEST-- +querystring offset set +--SKIPIF-- + +--FILE-- + +===DONE=== +--EXPECT-- +Test +foo=bar&bar=baz +foo=baz&bar=baz +===DONE===