Skip to content

Commit 6e99a28

Browse files
Fix mbregex search state after cache invalidation
1 parent a96f6ff commit 6e99a28

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

ext/mbstring/php_mbregex.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ static php_mb_regex_t *php_mbregex_compile_pattern(const char *pattern, size_t p
481481
if (rc == MBREX(search_re)) {
482482
/* reuse the new rc? see bug #72399 */
483483
MBREX(search_re) = NULL;
484+
if (MBREX(search_regs) != NULL) {
485+
onig_region_free(MBREX(search_regs), 1);
486+
MBREX(search_regs) = NULL;
487+
}
484488
}
485489
zend_hash_str_update_ptr(&MBREX(ht_rc), (char *)pattern, patlen, retval);
486490
} else {

ext/mbstring/tests/gh21036.phpt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
GH-21036 (mb_ereg_search_getregs() after regex cache invalidation)
3+
--EXTENSIONS--
4+
mbstring
5+
--FILE--
6+
<?php
7+
error_reporting(E_ALL & ~E_DEPRECATED);
8+
9+
$pattern = '(?<name>a)';
10+
mb_ereg_search_init('a', $pattern);
11+
mb_ereg_search_pos();
12+
mb_eregi($pattern, 'a');
13+
14+
var_dump(mb_ereg_search_getregs());
15+
?>
16+
--EXPECT--
17+
bool(false)

0 commit comments

Comments
 (0)