From 519531f3a0dfb94d9bee86d37193ca1e8c69f91b Mon Sep 17 00:00:00 2001 From: Zach H Date: Sat, 9 Dec 2023 00:51:54 -0500 Subject: [PATCH] Support escaping single and double quotes in Deck Editor Search Regex Strings (#4948) - Fix #4946 --- cockatrice/src/filter_string.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/filter_string.cpp b/cockatrice/src/filter_string.cpp index e45108cf..ea07dede 100644 --- a/cockatrice/src/filter_string.cpp +++ b/cockatrice/src/filter_string.cpp @@ -42,9 +42,10 @@ ColorQuery <- [cC] 'olor'? <[iI]?> <[:!]> ColorEx* FieldQuery <- String [:] RegexString / String ws? NumericExpression -NonQuote <- !["]. -UnescapedStringListPart <- ![":<>=! ]. -String <- UnescapedStringListPart+ / ["] ["] +NonDoubleQuoteUnlessEscaped <- !["]. / '\"'. +NonSingleQuoteUnlessEscaped <- ![']. / "\'". +UnescapedStringListPart <- !['":<>=! ]. +String <- UnescapedStringListPart+ / ["] ["] / ['] ['] StringValue <- String / [(] StringList [)] StringList <- StringListString (ws? [,] ws? StringListString)* StringListString <- UnescapedStringListPart+ @@ -56,7 +57,7 @@ CompactStringSet <- StringListString ([,+] StringListString)+ NumericExpression <- NumericOperator ws? NumericValue NumericOperator <- [=:] / <[> -NumericValue <- [0-9]+ +NumericValue <- [0-9]+ )"); @@ -242,7 +243,12 @@ static void setupParserRules() search["RegexString"] = [](const peg::SemanticValues &sv) -> StringMatcher { auto target = sv[0].get(); - return [=](const QString &s) { return s.QString::contains(target, Qt::CaseInsensitive); }; + return [=](const QString &s) { + auto sanitizedTarget = QString(target); + sanitizedTarget.replace("\\\"", "\""); + sanitizedTarget.replace("\\'", "'"); + return s.QString::contains(sanitizedTarget, Qt::CaseInsensitive); + }; }; search["OracleQuery"] = [](const peg::SemanticValues &sv) -> Filter {