From 1186ae81a7b71253ead6626691b3b7dfe119fae3 Mon Sep 17 00:00:00 2001 From: Shree Date: Thu, 16 Oct 2025 13:05:50 +0530 Subject: [PATCH] Handleded for this test case - o. w --- web/pdf_find_controller.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 5f5f00c5a..724a55a24 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -45,6 +45,8 @@ const CHARACTERS_TO_NORMALIZE = { "\u00BE": "3/4", // Vulgar fraction three quarters }; +const escapeForRegex = str => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + // These diacritics aren't considered as combining diacritics // when searching in a document: // https://searchfox.org/mozilla-central/source/intl/unicharutil/util/is_combining_diacritic.py. @@ -78,7 +80,7 @@ let DIACRITICS_EXCEPTION_STR; // Lazily initialized, see below. const DIACRITICS_REG_EXP = /\p{M}+/gu; const SPECIAL_CHARS_REG_EXP = - /([.*+?^${}()|[\]\\])|(\p{P})|(\s+)|(\p{M})|(\p{L})/gu; + /([*+^${}()|[\]\\])|((?:[.?]|\p{P})+)|(\s+)|(\p{M})|(\p{L})/gu; const NOT_DIACRITIC_FROM_END_REG_EXP = /([^\p{M}])\p{M}*$/u; const NOT_DIACRITIC_FROM_START_REG_EXP = /^\p{M}*([^\p{M}])/u; @@ -732,7 +734,9 @@ class PDFFindController { } if (p2) { // Punctuation: allow optional spaces ONLY if the user typed spaces. - return queryHasWhitespace ? `[ ]*${p2}[ ]*` : `${p2}`; + // p2 is a *run* of punctuation; escape it as a whole. + const escapedRun = escapeForRegex(p2); + return queryHasWhitespace ? `[ ]*${escapedRun}[ ]*` : `${escapedRun}`; } if (p3) { // Replace spaces by \s+ to be sure to match any spaces.