Skip to content

Commit 4f50d58

Browse files
cmb69smalyshev
authored andcommitted
Fix #78633: Heap buffer overflow (read) in mb_eregi
We backport kkos/oniguruma@15c4228.
1 parent ce035dc commit 4f50d58

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

ext/mbstring/oniguruma/src/regcomp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,8 +724,8 @@ add_compile_string(UChar* s, int mb_len, int str_len,
724724
COP(reg)->exact_n.s = p;
725725
}
726726
else {
727+
xmemset(COP(reg)->exact.s, 0, sizeof(COP(reg)->exact.s));
727728
xmemcpy(COP(reg)->exact.s, s, (size_t )byte_len);
728-
COP(reg)->exact.s[byte_len] = '\0';
729729
}
730730

731731
return 0;

ext/mbstring/oniguruma/src/regexec.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2900,6 +2900,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
29002900
DATA_ENSURE(0);
29012901
q = lowbuf;
29022902
while (len-- > 0) {
2903+
if (ps >= endp) goto fail;
29032904
if (*ps != *q) goto fail;
29042905
ps++; q++;
29052906
}

ext/mbstring/tests/bug78633.phpt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
Bug #78633 (Heap buffer overflow (read) in mb_eregi)
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('mbstring')) die('skip mbstring extension not available');
6+
if (!function_exists('mb_eregi')) die('skip mb_eregi function not available');
7+
?>
8+
--FILE--
9+
<?php
10+
var_dump(mb_eregi(".+Isssǰ", ".+Isssǰ"));
11+
?>
12+
--EXPECT--
13+
bool(false)

0 commit comments

Comments
 (0)