From be96f4d7fb0cabced5bc6a9368977ddfe02d1f71 Mon Sep 17 00:00:00 2001 From: ylavic Date: Sun, 2 Dec 2018 23:26:58 +0100 Subject: [PATCH 1/2] GenericRegex: don't throw/abort on syntax error (unclosed parenthesis). --- include/rapidjson/internal/regex.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/rapidjson/internal/regex.h b/include/rapidjson/internal/regex.h index 377f86c..16e3559 100644 --- a/include/rapidjson/internal/regex.h +++ b/include/rapidjson/internal/regex.h @@ -395,8 +395,7 @@ private: } return false; - default: - RAPIDJSON_ASSERT(op == kOneOrMore); + case kOneOrMore: if (operandStack.GetSize() >= sizeof(Frag)) { Frag e = *operandStack.template Pop(1); SizeType s = NewState(kRegexInvalidState, e.start, 0); @@ -405,6 +404,10 @@ private: return true; } return false; + + default: + // syntax error (e.g. unclosed kLeftParenthesis) + return false; } } From 8c147873980f4a9cc5e5cbf4248fccd5fdd8b57c Mon Sep 17 00:00:00 2001 From: ylavic Date: Mon, 3 Dec 2018 11:49:34 +0100 Subject: [PATCH 2/2] Unit test for invalid GenericRegex (unclosed parenthesis). --- test/unittest/regextest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unittest/regextest.cpp b/test/unittest/regextest.cpp index cdd3630..cf89973 100644 --- a/test/unittest/regextest.cpp +++ b/test/unittest/regextest.cpp @@ -595,6 +595,7 @@ TEST(Regex, Invalid) { TEST_INVALID(""); TEST_INVALID("a|"); TEST_INVALID("()"); + TEST_INVALID("("); TEST_INVALID(")"); TEST_INVALID("(a))"); TEST_INVALID("(a|)");