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:
3
NEWS
3
NEWS
@@ -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)
|
||||
|
||||
@@ -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++;
|
||||
|
||||
26
ext/pcre/tests/preg_match_frameless_leak.phpt
Normal file
26
ext/pcre/tests/preg_match_frameless_leak.phpt
Normal 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
|
||||
Reference in New Issue
Block a user