From f33979d45e2e51c745f6f42ffd0caf34e33e508c Mon Sep 17 00:00:00 2001 From: Ebrahim Shafiei Date: Sun, 31 May 2026 00:38:09 +0330 Subject: [PATCH] fix(common): use lazy quantifiers in removeDynamicContent to stop over-matching --- lib/core/common.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index a28abcb4f0..0b0a7ea590 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -3298,6 +3298,11 @@ def removeDynamicContent(page): """ Removing dynamic content from supplied page basing removal on precalculated dynamic markings + + Note: lazy quantifiers (`.+?`) are used on purpose. Greedy matching + would collapse everything between the first prefix and the last + suffix on pages where those anchors repeat (e.g. SPAs, templated + listings), masking real differences between True/False responses. """ if page: @@ -3307,11 +3312,11 @@ def removeDynamicContent(page): if prefix is None and suffix is None: continue elif prefix is None: - page = re.sub(r"(?s)^.+%s" % re.escape(suffix), suffix.replace('\\', r'\\'), page) + page = re.sub(r"(?s)^.+?%s" % re.escape(suffix), suffix.replace('\\', r'\\'), page) elif suffix is None: page = re.sub(r"(?s)%s.+$" % re.escape(prefix), prefix.replace('\\', r'\\'), page) else: - page = re.sub(r"(?s)%s.+%s" % (re.escape(prefix), re.escape(suffix)), "%s%s" % (prefix.replace('\\', r'\\'), suffix.replace('\\', r'\\')), page) + page = re.sub(r"(?s)%s.+?%s" % (re.escape(prefix), re.escape(suffix)), "%s%s" % (prefix.replace('\\', r'\\'), suffix.replace('\\', r'\\')), page) return page