diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 7f7df34d0bf38..06e320028fe56 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -1535,7 +1535,7 @@ PHP_FUNCTION(mb_ereg_search_getregs) add_index_bool(return_value, i, 0); } } - if (onig_number_of_names(MBREX(search_re)) > 0) { + if (MBREX(search_re) != NULL && onig_number_of_names(MBREX(search_re)) > 0) { mb_regex_groups_iter_args args = { return_value, Z_STRVAL(MBREX(search_str)), diff --git a/ext/mbstring/tests/gh21036_mb_ereg_search_getregs_null.phpt b/ext/mbstring/tests/gh21036_mb_ereg_search_getregs_null.phpt new file mode 100644 index 0000000000000..e868797ffac1d --- /dev/null +++ b/ext/mbstring/tests/gh21036_mb_ereg_search_getregs_null.phpt @@ -0,0 +1,26 @@ +--TEST-- +GH-21036 (mb_ereg_search_getregs() crash after mb_eregi() invalidates search_re) +--CREDITS-- +vi3tL0u1s +--EXTENSIONS-- +mbstring +--SKIPIF-- + +--FILE-- + +--EXPECT-- +array(1) { + [0]=> + string(1) "a" +}