From a0c9bfd931e42ab6ef95e12b24be1d072cf5b3a6 Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Sun, 17 Feb 2019 11:37:25 +0100 Subject: [PATCH] Aul: Correctly check for enable/disable keywords in warning pragma The parser was only checking that the passed setting matched the beginning of the expected keyword, instead of checking for the full length. This way, users could write "#warning e" instead of the expected "#warning enable" and still have it work. --- src/script/C4AulParse.cpp | 4 ++-- tests/aul/AulSyntaxTest.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/script/C4AulParse.cpp b/src/script/C4AulParse.cpp index 42a22138c..3071709a8 100644 --- a/src/script/C4AulParse.cpp +++ b/src/script/C4AulParse.cpp @@ -791,11 +791,11 @@ void C4AulParse::Parse_WarningPragma() auto start = cursor; cursor = std::find_if(start, end, IsWhiteSpace); bool enable_warning = false; - if (std::equal(start, cursor, C4Aul_Warning_enable)) + if (cursor - start == sizeof(C4Aul_Warning_enable) - 1 && std::equal(start, cursor, C4Aul_Warning_enable)) { enable_warning = true; } - else if (std::equal(start, cursor, C4Aul_Warning_disable)) + else if (cursor - start == sizeof(C4Aul_Warning_disable) - 1 && std::equal(start, cursor, C4Aul_Warning_disable)) { enable_warning = false; } diff --git a/tests/aul/AulSyntaxTest.cpp b/tests/aul/AulSyntaxTest.cpp index 7dab56a92..fecfa48dc 100644 --- a/tests/aul/AulSyntaxTest.cpp +++ b/tests/aul/AulSyntaxTest.cpp @@ -94,6 +94,10 @@ TEST(AulSyntaxTest, PragmaWarningWithInsufficientData) EXPECT_THROW(ParseScript("#warning\n"), C4AulParseError); EXPECT_THROW(ParseScript("#warning "), C4AulParseError); EXPECT_THROW(ParseScript("#warning \n"), C4AulParseError); + EXPECT_THROW(ParseScript("#warning e"), C4AulParseError); + EXPECT_THROW(ParseScript("#warning enabl"), C4AulParseError); + EXPECT_THROW(ParseScript("#warning d"), C4AulParseError); + EXPECT_THROW(ParseScript("#warning disabl"), C4AulParseError); } using namespace ::aul::ast;