aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2024-11-02 01:02:12 +0100
committerGravatar GitHub <noreply@github.com> 2024-11-02 01:02:12 +0100
commitdf28324c34dbbcde8ac4859e8e94314d29e1a409 (patch)
tree7d082e62af4e163486146bab804baa1dc4f7a534
parentb7bff9484fe313e8503ed4effae839573b3a8539 (diff)
Fix regex search for tags (#6972)
https://github.com/FreshRSS/FreshRSS/issues/6949#issuecomment-2452363378
-rw-r--r--app/Models/BooleanSearch.php2
-rw-r--r--tests/app/Models/SearchTest.php5
2 files changed, 6 insertions, 1 deletions
diff --git a/app/Models/BooleanSearch.php b/app/Models/BooleanSearch.php
index 62d4cf9c1..50f8feea1 100644
--- a/app/Models/BooleanSearch.php
+++ b/app/Models/BooleanSearch.php
@@ -137,7 +137,7 @@ class FreshRSS_BooleanSearch {
* Temporarily escape parentheses used in regex expressions.
*/
public static function escapeRegexParentheses(string $input): string {
- return preg_replace_callback('#(?<=[\\s(:!-]|^)(?<![\\\\])/.+?(?<!\\\\)/[im]*#',
+ return preg_replace_callback('%(?<=[\\s(:#!-]|^)(?<![\\\\])/.+?(?<!\\\\)/[im]*%',
fn(array $matches): string => str_replace(['(', ')'], ['\\u0028', '\\u0029'], $matches[0]),
$input
) ?? '';
diff --git a/tests/app/Models/SearchTest.php b/tests/app/Models/SearchTest.php
index 403c2c98e..8ff98a8e8 100644
--- a/tests/app/Models/SearchTest.php
+++ b/tests/app/Models/SearchTest.php
@@ -525,6 +525,11 @@ class SearchTest extends PHPUnit\Framework\TestCase {
'(NOT e.title ~ ? AND NOT e.content ~ ? )',
['^ab$', '^ab$']
],
+ [
+ '#/^a(b|c)$/im',
+ "(REPLACE(REPLACE(e.tags, ' #', '#'), '#', '\n') ~* ? )",
+ ['(?m)^a(b|c)$']
+ ],
[ // Not a regex
'inurl:https://example.net/test/',
'(e.link LIKE ? )',