From 4a975fc65c1885c505cb1271411cef14724caf4c Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Tue, 3 Mar 2015 21:57:03 +0100 Subject: [PATCH] fis querystring offset set bug --- php_http_querystring.c | 18 +++++++++++++----- tests/querystring003.phpt | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 tests/querystring003.phpt 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=== -- 2.30.2