Merge pull request #20518 from calixteman/issue20516

Escape punctuation signs in search query
This commit is contained in:
Tim van der Meij 2025-12-22 19:02:45 +01:00 committed by GitHub
commit 509fcc84e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 27 additions and 3 deletions

View File

@ -765,3 +765,4 @@
!two_paragraphs.pdf
!paragraph_and_link.pdf
!issue20225.pdf
!issue20516.pdf

BIN
test/pdfs/issue20516.pdf Normal file

Binary file not shown.

View File

@ -1158,6 +1158,26 @@ describe("pdf_find_controller", function () {
});
});
it("performs a search with a group of punctuation signs to escape", async () => {
const { eventBus, pdfFindController } =
await initPdfFindController("issue20516.pdf");
await testSearch({
eventBus,
pdfFindController,
state: {
query: `("client")`,
},
matchesPerPage: [1],
selectedMatch: {
pageIndex: 0,
matchIndex: 0,
},
pageMatches: [[6]],
pageMatchesLength: [[10]],
});
});
describe("custom matcher", () => {
it("calls to the matcher with the right arguments", async () => {
const QUERY = "Foo bar";

View File

@ -77,8 +77,8 @@ const DIACRITICS_EXCEPTION = new Set([
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;
const SPECIAL_PUNCTUATION_CHARACTERS = /[.?*{}()[\]\\]/g;
const SPECIAL_CHARS_REG_EXP = /([+^$|])|(\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;
@ -739,7 +739,10 @@ class PDFFindController {
}
if (p2) {
// Allow whitespaces around group of punctuation signs.
return addExtraWhitespaces(p2, p2.replaceAll(/[.?]/g, "\\$&"));
return addExtraWhitespaces(
p2,
p2.replaceAll(SPECIAL_PUNCTUATION_CHARACTERS, "\\$&")
);
}
if (p3) {
// Replace spaces by \s+ to be sure to match any spaces.