X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=src%2Fphp_http_querystring.c;h=a302bbd732dc2167bfacebde87396395f05e277a;hp=dfda3d5e935c0ac74f6b392effb4c45b4379b0a0;hb=d5d03014cff8c8ca80ee7866af100d3ceae1bd8f;hpb=b3831bc5f19cf32880ea19341c3527f0e9553517 diff --git a/src/php_http_querystring.c b/src/php_http_querystring.c index dfda3d5..a302bbd 100644 --- a/src/php_http_querystring.c +++ b/src/php_http_querystring.c @@ -15,7 +15,7 @@ #include "php_variables.h" #include "ext/spl/spl_array.h" -#ifdef PHP_HTTP_HAVE_ICONV +#if PHP_HTTP_HAVE_ICONV # ifndef HAVE_ICONV # define HAVE_ICONV 1 # endif @@ -92,7 +92,7 @@ static inline void php_http_querystring_get(zval *instance, int type, char *name } } -#ifdef PHP_HTTP_HAVE_ICONV +#if PHP_HTTP_HAVE_ICONV ZEND_RESULT_CODE php_http_querystring_xlate(zval *dst, zval *src, const char *ie, const char *oe) { zval *entry; @@ -160,7 +160,7 @@ static int apply_querystring(zval *val) zval *zvalue; if ((zvalue = zend_hash_str_find(Z_ARRVAL_P(val), ZEND_STRL("value")))) { - zval tmp; + zval tmp = {0}; ZVAL_COPY(&tmp, zvalue); zval_dtor(val); @@ -289,25 +289,24 @@ ZEND_RESULT_CODE php_http_querystring_update(zval *qarray, zval *params, zval *o /* * update */ - zval equal, tmp, *entry = &tmp; + zval equal, tmp, *entry = NULL; ZVAL_UNDEF(&tmp); /* recursive */ if (Z_TYPE_P(params_entry) == IS_ARRAY || Z_TYPE_P(params_entry) == IS_OBJECT) { - ZVAL_DUP(entry, qarray_entry); - convert_to_array(entry); - php_http_querystring_update(entry, params_entry, NULL); + ZVAL_DUP(&tmp, qarray_entry); + convert_to_array(&tmp); + php_http_querystring_update(&tmp, params_entry, NULL); + entry = &tmp; } else if ((FAILURE == is_identical_function(&equal, qarray_entry, params_entry)) || Z_TYPE(equal) != IS_TRUE) { Z_TRY_ADDREF_P(params_entry); entry = params_entry; } - if (entry) { - if (key.key) { - zend_hash_update(Z_ARRVAL_P(qarray), key.key, entry); - } else { - zend_hash_index_update(Z_ARRVAL_P(qarray), key.h, entry); - } + if (key.key) { + zend_hash_update(Z_ARRVAL_P(qarray), key.key, entry ? entry : &tmp); + } else { + zend_hash_index_update(Z_ARRVAL_P(qarray), key.h, entry ? entry : &tmp); } } else { zval entry, *entry_ptr = &entry; @@ -386,8 +385,6 @@ PHP_METHOD(HttpQueryString, getGlobalInstance) ZVAL_MAKE_REF(_GET); zend_update_property(php_http_querystring_class_entry, return_value, ZEND_STRL("queryArray"), _GET); - - zend_update_static_property(php_http_querystring_class_entry, ZEND_STRL("instance"), return_value); } else { php_http_throw(unexpected_val, "Could not acquire reference to superglobal GET array", NULL); } @@ -535,7 +532,7 @@ PHP_HTTP_QUERYSTRING_GETTER(getString, IS_STRING); PHP_HTTP_QUERYSTRING_GETTER(getArray, IS_ARRAY); PHP_HTTP_QUERYSTRING_GETTER(getObject, IS_OBJECT); -#ifdef PHP_HTTP_HAVE_ICONV +#if PHP_HTTP_HAVE_ICONV ZEND_BEGIN_ARG_INFO_EX(ai_HttpQueryString_xlate, 0, 0, 2) ZEND_ARG_INFO(0, from_encoding) ZEND_ARG_INFO(0, to_encoding) @@ -683,7 +680,7 @@ PHP_METHOD(HttpQueryString, offsetUnset) } static zend_function_entry php_http_querystring_methods[] = { - PHP_ME(HttpQueryString, __construct, ai_HttpQueryString___construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR|ZEND_ACC_FINAL) + PHP_ME(HttpQueryString, __construct, ai_HttpQueryString___construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) PHP_ME(HttpQueryString, toArray, ai_HttpQueryString_toArray, ZEND_ACC_PUBLIC) PHP_ME(HttpQueryString, toString, ai_HttpQueryString_toString, ZEND_ACC_PUBLIC) @@ -703,7 +700,7 @@ static zend_function_entry php_http_querystring_methods[] = { PHP_ME(HttpQueryString, getIterator, ai_HttpQueryString_getIterator, ZEND_ACC_PUBLIC) PHP_ME(HttpQueryString, getGlobalInstance, ai_HttpQueryString_getGlobalInstance, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) -#ifdef PHP_HTTP_HAVE_ICONV +#if PHP_HTTP_HAVE_ICONV PHP_ME(HttpQueryString, xlate, ai_HttpQueryString_xlate, ZEND_ACC_PUBLIC) #endif