summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-03-13 15:48:53 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-03-27 10:34:16 +0100
commit9e77d5a9da9e80a1bfe226f60ccb12fd8bf9481c (patch)
tree14fd42aa401d1a007a0c5ca85382b7eb26015d6a
parent150df5b17c371f6e6a552b88435afaca0d1ad096 (diff)
downloadphp-git-9e77d5a9da9e80a1bfe226f60ccb12fd8bf9481c.tar.gz
Fix #76999: mb_regex_set_options() return current options
When setting new options, `mb_regex_set_options()` is supposed to return the *previous* options.
-rw-r--r--NEWS1
-rw-r--r--ext/mbstring/php_mbregex.c8
-rw-r--r--ext/mbstring/tests/bug76999.phpt22
3 files changed, 28 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index c05493cc84..83ef93e59d 100644
--- a/NEWS
+++ b/NEWS
@@ -56,6 +56,7 @@ PHP NEWS
. Removed deprecated ldap_sort. (mcmic)
- MBString:
+ . Fixed bug #76999 (mb_regex_set_options() return current options). (cmb)
. Removed the unused $is_hex parameter from mb_decode_numericentity(). (cmb)
- MySQLi:
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index ceda96398e..bcdff2c4c9 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -1682,8 +1682,8 @@ static void _php_mb_regex_set_options(OnigOptionType options, OnigSyntaxType *sy
Set or get the default options for mbregex functions */
PHP_FUNCTION(mb_regex_set_options)
{
- OnigOptionType opt;
- OnigSyntaxType *syntax;
+ OnigOptionType opt, prev_opt;
+ OnigSyntaxType *syntax, *prev_syntax;
char *string = NULL;
size_t string_len;
char buf[16];
@@ -1696,7 +1696,9 @@ PHP_FUNCTION(mb_regex_set_options)
opt = 0;
syntax = NULL;
_php_mb_regex_init_options(string, string_len, &opt, &syntax, NULL);
- _php_mb_regex_set_options(opt, syntax, NULL, NULL);
+ _php_mb_regex_set_options(opt, syntax, &prev_opt, &prev_syntax);
+ opt = prev_opt;
+ syntax = prev_syntax;
} else {
opt = MBREX(regex_default_options);
syntax = MBREX(regex_default_syntax);
diff --git a/ext/mbstring/tests/bug76999.phpt b/ext/mbstring/tests/bug76999.phpt
new file mode 100644
index 0000000000..5ba9f0e8e3
--- /dev/null
+++ b/ext/mbstring/tests/bug76999.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #76999 (mb_regex_set_options() return current options)
+--SKIPIF--
+<?php
+if (!extension_loaded('mbstring')) die('skip mbstring extension not available');
+if (!function_exists('mb_regex_set_options')) die('skip mb_regex_set_options() not available');
+?>
+--FILE--
+<?php
+mb_regex_set_options("pr");
+var_dump(mb_regex_set_options("m"));
+var_dump(mb_regex_set_options("mdi"));
+var_dump(mb_regex_set_options("m"));
+var_dump(mb_regex_set_options("a"));
+var_dump(mb_regex_set_options());
+?>
+--EXPECT--
+string(2) "pr"
+string(2) "mr"
+string(3) "imd"
+string(2) "mr"
+string(1) "r"