1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

ext/pcre: preg_match() fix memory leak with invalid regexes.

close GH-21290
This commit is contained in:
David Carlier
2026-02-24 20:58:01 +00:00
parent ec5a1e001d
commit 6c45f7a000
3 changed files with 31 additions and 1 deletions

3
NEWS
View File

@@ -55,6 +55,9 @@ PHP NEWS
. Fixed pcntl_signal_dispatch() stale pointer and exception
handling. (David Carlier)
- PCRE:
. Fixed preg_match memory leak with invalid regexes. (David Carlier)
- PDO_PGSQL:
. Fixed bug GH-21055 (connection attribute status typo for GSS negotiation).
(lsaos)

View File

@@ -1489,7 +1489,8 @@ ZEND_FRAMELESS_FUNCTION(preg_match, 2)
/* Compile regex or get it from cache. */
pcre_cache_entry *pce;
if ((pce = pcre_get_compiled_regex_cache(regex)) == NULL) {
RETURN_FALSE;
RETVAL_FALSE;
goto flf_clean;
}
pce->refcount++;

View File

@@ -0,0 +1,26 @@
--TEST--
Memory leak in preg_match() frameless function with invalid regex and object arguments
--FILE--
<?php
class Str {
private $val;
public function __construct($val) {
$this->val = $val;
}
public function __toString() {
return $this->val;
}
}
$regex = new Str("invalid regex");
$subject = new Str("some subject");
// Running in a loop to ensure leak detection if run with memory tools
for ($i = 0; $i < 100; $i++) {
@preg_match($regex, $subject);
}
echo "Done";
?>
--EXPECT--
Done