com php-src: Fix bug #73807: NEWS main/php_variables.c
[email protected] (Nikita Popov)
| Newsgroups | php.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: a15bffd105ac28fd0dd9b596632dbf035238fda3 Author: Nikita Popov <[email protected]> Thu, 2 Feb 2017 16:04:02 +0100 Parents: 570a2738074fba4305949ac7b16e93ca2d9c5e8a Branches: PHP-7.0 PHP-7.1 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=a15bffd105ac28fd0dd9b596632dbf035238fda3 Log: Fix bug #73807 Bugs: https://bugs.php.net/73807 Changed paths: M NEWS M main/php_variables.c Diff: diff --git a/NEWS b/NEWS index 690c763..3d402c6 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2017 PHP 7.0.17 +- Core: + . Fixed bug #73807 (Performance problem with processing large post request). + (Nikita) + - OpenSSL: . Fixed bug #74022 (PHP Fast CGI crashes when reading from a pfx file). (Anatol) diff --git a/main/php_variables.c b/main/php_variables.c index dc4390c..aa6e426 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -239,11 +239,14 @@ typedef struct post_var_data { char *ptr; char *end; uint64_t cnt; + + /* Bytes in ptr that have already been scanned for '&' */ + size_t already_scanned; } post_var_data_t; static zend_bool add_post_var(zval *arr, post_var_data_t *var, zend_bool eof) { - char *ksep, *vsep, *val; + char *start, *ksep, *vsep, *val; size_t klen, vlen; size_t new_vlen; @@ -251,9 +254,11 @@ static zend_bool add_post_var(zval *arr, post_var_data_t *var, zend_bool eof) return 0; } - vsep = memchr(var->ptr, '&', var->end - var->ptr); + start = var->ptr + var->already_scanned; + vsep = memchr(start, '&', var->end - start); if (!vsep) { if (!eof) { + var->already_scanned = var->end - var->ptr; return 0; } else { vsep = var->end; @@ -286,6 +291,7 @@ static zend_bool add_post_var(zval *arr, post_var_data_t *var, zend_bool eof) efree(val); var->ptr = vsep + (vsep != var->end); + var->already_scanned = 0; return 1; }