bug #3809 Restores the leniency of the matches twig comparison (la5942)

This PR was merged into the 3.x branch.

Discussion
----------

Restores the leniency of the `matches` twig comparison

Restores the leniency of the `matches` twig comparison, allowing null subject to result in a non-match.

Resolves BC break introduced in PR https://github.com/twigphp/Twig/pull/3687 ref in https://github.com/twigphp/Twig/issues/3801#issuecomment-1413345131

As per pattern in https://github.com/twigphp/Twig/pull/3617

Commits
-------

f1366689 Restores the leniency of the `matches` twig comparison, allowing null subject to result in a non-match.
This commit is contained in:
Fabien Potencier
2023-02-08 08:21:13 +01:00
2 changed files with 5 additions and 3 deletions
+3 -3
View File
@@ -1021,19 +1021,19 @@ function twig_compare($a, $b)
/**
* @param string $pattern
* @param string $subject
* @param string|null $subject
*
* @return int
*
* @throws RuntimeError When an invalid pattern is used
*/
function twig_matches(string $regexp, string $str)
function twig_matches(string $regexp, ?string $str)
{
set_error_handler(function ($t, $m) use ($regexp) {
throw new RuntimeError(sprintf('Regexp "%s" passed to "matches" is not valid', $regexp).substr($m, 12));
});
try {
return preg_match($regexp, $str);
return preg_match($regexp, $str ?? '');
} finally {
restore_error_handler();
}
+2
View File
@@ -4,9 +4,11 @@ Twig supports the "matches" operator
{{ 'foo' matches '/o/' ? 'OK' : 'KO' }}
{{ 'foo' matches '/^fo/' ? 'OK' : 'KO' }}
{{ 'foo' matches '/O/i' ? 'OK' : 'KO' }}
{{ null matches '/o/' }}
--DATA--
return []
--EXPECT--
OK
OK
OK
0