commit - c3c00e1340a896b10848991b4c36b0c11dd5e84e
commit + 229963a7d6b2270e522fd60ea3e260e1058dc206
blob - 100f35ed35d865752c08144198544e300f9adab2
blob + 22fc272c4623152e905f00659345cb747f262e6f
--- test/fuzz/luaL_loadbuffer/serializer.cc
+++ test/fuzz/luaL_loadbuffer/serializer.cc
namespace luajit_fuzzer {
namespace {
+/*
+ * The following keywords are reserved and cannot be used as names,
+ * see Lua 5.1 Reference Manual, 2.1 – Lexical Conventions.
+ */
+const std::set<std::string> KReservedLuaKeywords {
+ "and",
+ "break",
+ "do",
+ "else",
+ "elseif",
+ "end",
+ "false",
+ "for",
+ "function",
+ "if",
+ "in",
+ "local",
+ "nil",
+ "not",
+ "or",
+ "repeat",
+ "return",
+ "then",
+ "true",
+ "until",
+ "while",
+};
+
const std::string kCounterNamePrefix = "counter_";
const std::string kNumberWrapperName = "always_number";
const std::string kBinOpWrapperName = "only_numbers_cmp";
{
std::string indexname_str = PrefixExpressionToString(
indexname.prefixexp());
- indexname_str += "." + ConvertToStringDefault(indexname.name());
+ std::string idx_str = ConvertToStringDefault(indexname.name());
+ /* Prevent using reserved keywords as indices. */
+ if (KReservedLuaKeywords.find(idx_str) != KReservedLuaKeywords.end()) {
+ idx_str += "_1";
+ }
+ indexname_str += "." + idx_str;
return indexname_str;
}