diff options
| author | Yasuo Ohgaki <yohgaki@php.net> | 2016-09-01 19:15:32 +0900 |
|---|---|---|
| committer | Stanislav Malyshev <stas@php.net> | 2019-03-28 00:31:57 -0700 |
| commit | 738016bd884a339009e1af371eaba0fee60bf23b (patch) | |
| tree | 1b46e398ce25f03bde6f737a7f4cd5e16b918700 /ext/mbstring/tests | |
| parent | 218154e6958bc911ee2640baca10854cb2c33e20 (diff) | |
| download | php-git-738016bd884a339009e1af371eaba0fee60bf23b.tar.gz | |
Implement RF bug #72777 - ensure stack limits on mbstring functions.
The patch creates new config: mbstring.regex_stack_limit, which
defaults to 100000.
Diffstat (limited to 'ext/mbstring/tests')
| -rw-r--r-- | ext/mbstring/tests/mbregex_stack_limit.phpt | 24 | ||||
| -rw-r--r-- | ext/mbstring/tests/mbregex_stack_limit2.phpt | 25 |
2 files changed, 49 insertions, 0 deletions
diff --git a/ext/mbstring/tests/mbregex_stack_limit.phpt b/ext/mbstring/tests/mbregex_stack_limit.phpt new file mode 100644 index 0000000000..9d0f3acc9d --- /dev/null +++ b/ext/mbstring/tests/mbregex_stack_limit.phpt @@ -0,0 +1,24 @@ +--TEST-- +Test oniguruma stack limit +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +$s = str_repeat(' ', 30000); + +ini_set('mbstring.regex_stack_limit', 10000); +var_dump(mb_ereg('\\s+$', $s)); + +ini_set('mbstring.regex_stack_limit', 30000); +var_dump(mb_ereg('\\s+$', $s)); + +ini_set('mbstring.regex_stack_limit', 30001); +var_dump(mb_ereg('\\s+$', $s)); + +echo 'OK'; +?> +--EXPECT-- +bool(false) +bool(false) +int(1) +OK diff --git a/ext/mbstring/tests/mbregex_stack_limit2.phpt b/ext/mbstring/tests/mbregex_stack_limit2.phpt new file mode 100644 index 0000000000..12c8c8edab --- /dev/null +++ b/ext/mbstring/tests/mbregex_stack_limit2.phpt @@ -0,0 +1,25 @@ +--TEST-- +Test oniguruma stack limit +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +function mb_trim( $string, $chars = "", $chars_array = array() ) +{ + for( $x=0; $x<iconv_strlen( $chars ); $x++ ) $chars_array[] = preg_quote( iconv_substr( $chars, $x, 1 ) ); + $encoded_char_list = implode( "|", array_merge( array( "\s","\t","\n","\r", "\0", "\x0B" ), $chars_array ) ); + + $string = mb_ereg_replace( "^($encoded_char_list)*", "", $string ); + $string = mb_ereg_replace( "($encoded_char_list)*$", "", $string ); + return $string; +} + +ini_set('mbstring.regex_stack_limit', 10000); +var_dump(mb_trim(str_repeat(' ', 10000))); + +echo 'OK'; +?> +--EXPECTF-- +Warning: mb_ereg_replace(): mbregex search failure in php_mbereg_replace_exec(): match-stack limit over in %s on line %d +string(0) "" +OK |
