com php-src: Validate pattern against mbregex encoding: ext/mbstring/php_mbregex.c ext/mbstring/tests/bug72 994.phpt ext/mbstring/tests/bug77370.phpt
ext/mbstring/tests/bug77371.phpt ext/mbstring/ tests/bug77381.phpt ext/mbstring/tests/mb_ereg _replace_variation1.phpt

From: Date: Thu, 28 Mar 2019 06:19:46 +0000
Subject: com php-src: Validate pattern against mbregex encoding: ext/mbstring/php_mbregex.c ext/mbstring/tests/bug72 994.phpt ext/mbstring/tests/bug77370.phpt
ext/mbstring/tests/bug77371.phpt ext/mbstring/ tests/bug77381.phpt ext/mbstring/tests/mb_ereg _replace_variation1.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-105379@lists.php.net to get a copy of this message
Commit: 40fe50daf6069f73d0be43d8fcd7d5953053c10d Author: Nikita Popov <nikita.ppv@gmail.com> Mon, 11 Feb 2019 12:10:40 +0100 Committer: Stanislav Malyshev <stas@php.net> Wed, 27 Mar 2019 23:19:46 -0700 Parents: 58c25bf679125a2da354db58ddc6b0cf6d10ee00 Branches: PHP-7.1 PHP-7.2 PHP-7.3 PHP-7.4 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=40fe50daf6069f73d0be43d8fcd7d5953053c10d Log: Validate pattern against mbregex encoding Oniguruma does not consistently perform this validation itself (at least on older versions), so make sure we check pattern encoding validity on the PHP side. Changed paths: M ext/mbstring/php_mbregex.c M ext/mbstring/tests/bug72994.phpt M ext/mbstring/tests/bug77370.phpt M ext/mbstring/tests/bug77371.phpt M ext/mbstring/tests/bug77381.phpt M ext/mbstring/tests/mb_ereg_replace_variation1.phpt Diff: diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 5b40661..ab4fe38 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -451,13 +451,18 @@ static php_mb_regex_t *php_mbregex_compile_pattern(const char *pattern, int patl OnigErrorInfo err_info; OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN]; + if (!php_mb_check_encoding(pattern, patlen, _php_mb_regex_mbctype2name(enc))) { + php_error_docref(NULL, E_WARNING, + "Pattern is not valid under %s encoding", _php_mb_regex_mbctype2name(enc)); + return NULL; + } + rc = zend_hash_str_find_ptr(&MBREX(ht_rc), (char *)pattern, patlen); if (!rc || onig_get_options(rc) != options || onig_get_encoding(rc) != enc || onig_get_syntax(rc) != syntax) { if ((err_code = onig_new(&retval, (OnigUChar *)pattern, (OnigUChar *)(pattern + patlen), options, enc, syntax, &err_info)) != ONIG_NORMAL) { onig_error_code_to_str(err_str, err_code, &err_info); php_error_docref(NULL, E_WARNING, "mbregex compile err: %s", err_str); - retval = NULL; - goto out; + return NULL; } if (rc == MBREX(search_re)) { /* reuse the new rc? see bug #72399 */ @@ -467,7 +472,6 @@ static php_mb_regex_t *php_mbregex_compile_pattern(const char *pattern, int patl } else { retval = rc; } -out: return retval; } /* }}} */ diff --git a/ext/mbstring/tests/bug72994.phpt b/ext/mbstring/tests/bug72994.phpt index 1d37bae...d001fac 100644 --- a/ext/mbstring/tests/bug72994.phpt +++ b/ext/mbstring/tests/bug72994.phpt @@ -13,5 +13,7 @@ var_dump($var1); ===DONE=== --EXPECTF-- Notice: Undefined variable: var in %s on line %d -string(0) "" + +Warning: mbereg_replace(): Pattern is not valid under UTF-8 encoding in %s on line %d +bool(false) ===DONE=== diff --git a/ext/mbstring/tests/bug77370.phpt b/ext/mbstring/tests/bug77370.phpt index c4d2558..d16fcd7 100644 --- a/ext/mbstring/tests/bug77370.phpt +++ b/ext/mbstring/tests/bug77370.phpt @@ -6,8 +6,6 @@ Bug #77370 (Buffer overflow on mb regex functions - fetch_token) <?php var_dump(mb_split(" \xfd","")); ?> ---EXPECT-- -array(1) { - [0]=> - string(0) "" -} +--EXPECTF-- +Warning: mb_split(): Pattern is not valid under UTF-8 encoding in %s on line %d +bool(false) diff --git a/ext/mbstring/tests/bug77371.phpt b/ext/mbstring/tests/bug77371.phpt index 33e5fc1..25f5ac9 100644 --- a/ext/mbstring/tests/bug77371.phpt +++ b/ext/mbstring/tests/bug77371.phpt @@ -6,5 +6,6 @@ Bug #77371 (heap buffer overflow in mb regex functions - compile_string_node) <?php var_dump(mb_ereg("()0\xfc00000\xfc00000\xfc00000\xfc","")); ?> ---EXPECT-- -bool(false) \ No newline at end of file +--EXPECTF-- +Warning: mb_ereg(): Pattern is not valid under UTF-8 encoding in %s on line %d +bool(false) diff --git a/ext/mbstring/tests/bug77381.phpt b/ext/mbstring/tests/bug77381.phpt index cb83759..9768cd3 100644 --- a/ext/mbstring/tests/bug77381.phpt +++ b/ext/mbstring/tests/bug77381.phpt @@ -9,8 +9,15 @@ var_dump(mb_ereg("(?i)000000000000000000000\xf0","")); var_dump(mb_ereg("0000\\"."\xf5","0")); var_dump(mb_ereg("(?i)FFF00000000000000000\xfd","")); ?> ---EXPECT-- -int(1) +--EXPECTF-- +Warning: mb_ereg(): Pattern is not valid under UTF-8 encoding in %s on line %d bool(false) + +Warning: mb_ereg(): Pattern is not valid under UTF-8 encoding in %s on line %d bool(false) + +Warning: mb_ereg(): Pattern is not valid under UTF-8 encoding in %s on line %d +bool(false) + +Warning: mb_ereg(): Pattern is not valid under UTF-8 encoding in %s on line %d bool(false) diff --git a/ext/mbstring/tests/mb_ereg_replace_variation1.phpt b/ext/mbstring/tests/mb_ereg_replace_variation1.phpt index 059d2c9..626e9a2 100644 --- a/ext/mbstring/tests/mb_ereg_replace_variation1.phpt +++ b/ext/mbstring/tests/mb_ereg_replace_variation1.phpt @@ -109,13 +109,17 @@ string(10) "string_val" string(10) "string_val" -- Iteration 4 -- -string(10) "string_val" + +Warning: mb_ereg_replace(): Pattern is not valid under UTF-8 encoding in %s on line %d +bool(false) -- Iteration 5 -- string(10) "string_val" -- Iteration 6 -- -string(10) "string_val" + +Warning: mb_ereg_replace(): Pattern is not valid under UTF-8 encoding in %s on line %d +bool(false) -- Iteration 7 -- string(10) "string_val"

« previous php.cvs (#105379) next »