From: Michael Wallner Date: Tue, 19 Dec 2006 14:26:47 +0000 (+0000) Subject: - fix infinite loop with http_parse_params("=") X-Git-Tag: RELEASE_1_4_0RC2~9 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=04ab82bb0588062ad30a3f8dd1b41792925aac83;p=m6w6%2Fext-http - fix infinite loop with http_parse_params("=") --- diff --git a/http_api.c b/http_api.c index ab59457..978d47a 100644 --- a/http_api.c +++ b/http_api.c @@ -411,9 +411,13 @@ PHP_HTTP_API void _http_parse_params_default_callback(void *arg, const char *key if (vallen) { MAKE_STD_ZVAL(entry); array_init(entry); - kdup = estrndup(key, keylen); - add_assoc_stringl_ex(entry, kdup, keylen + 1, (char *) val, vallen, 1); - efree(kdup); + if (keylen) { + kdup = estrndup(key, keylen); + add_assoc_stringl_ex(entry, kdup, keylen + 1, (char *) val, vallen, 1); + efree(kdup); + } else { + add_next_index_stringl(entry, (char *) val, vallen, 1); + } add_next_index_zval(&tmp, entry); } else { add_next_index_stringl(&tmp, (char *) key, keylen, 1); @@ -435,7 +439,9 @@ PHP_HTTP_API STATUS _http_parse_params_ex(const char *param, int flags, http_par char *s, *c, *key = NULL, *val = NULL; for(c = s = estrdup(param);;) { + continued: #if 0 + { char *tk = NULL, *tv = NULL; if (key) { @@ -467,8 +473,8 @@ PHP_HTTP_API STATUS _http_parse_params_ex(const char *param, int flags, http_par ), *c?*c:'0', tk, tv ); STR_FREE(tk); STR_FREE(tv); + } #endif - continued: switch (st) { case ST_QUOTE: quote: @@ -610,7 +616,15 @@ failure: http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Unexpected character (%c) at pos %tu of %zu", *c, c-s, strlen(s)); } if (flags & HTTP_PARAMS_ALLOW_FAILURE) { - --c; + if (st == ST_KEY) { + if (key) { + keylen = c - key; + } else { + key = c; + } + } else { + --c; + } st = ST_ADD; goto continued; }