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.
master
Nicolas Hake 2019-02-17 11:37:25 +01:00
parent c8d22e321b
commit a0c9bfd931
2 changed files with 6 additions and 2 deletions

View File

@ -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;
}

View File

@ -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;