commit - 229963a7d6b2270e522fd60ea3e260e1058dc206
commit + 17f5251efb9a39a888a3bba85867c7d06717ad31
blob - 44f81447a39b7fa4ac7dd4fd7e6f95dcb076a91b
blob + 92b6b8bdef3aab615a0fb54ab9f92483f90481a1
--- test/fuzz/luaL_loadbuffer/preamble.lua
+++ test/fuzz/luaL_loadbuffer/preamble.lua
return tonumber(val) or DEFAULT_NUMBER
end
+local not_nan_and_nil = function(val)
+ return (val ~= val or val == nil) and DEFAULT_NUMBER or val
+end
+
local __add = function(v1, v2)
return always_number(v1) + always_number(v2)
end
blob - 22fc272c4623152e905f00659345cb747f262e6f
blob + b4500da9cad3d96ed0406836754e3336d1abe269
--- test/fuzz/luaL_loadbuffer/serializer.cc
+++ test/fuzz/luaL_loadbuffer/serializer.cc
const std::string kCounterNamePrefix = "counter_";
const std::string kNumberWrapperName = "always_number";
const std::string kBinOpWrapperName = "only_numbers_cmp";
+const std::string kNotNaNAndNilWrapperName = "not_nan_and_nil";
PROTO_TOSTRING(Block, block);
PROTO_TOSTRING(Chunk, chunk);
return retval;
}
+std::string
+AllowedIndexExpressionToString(const Expression &expr)
+{
+ std::string retval;
+ retval += kNotNaNAndNilWrapperName;
+ retval += "(";
+ retval += ExpressionToString(expr);
+ retval += ")";
+ return retval;
+}
+
/**
* Class that controls id creation for counters. Basically, a
* variable wrapper that guarantees variable to be incremented.
NESTED_PROTO_TOSTRING(ExpressionAssignment, assignment, Field)
{
+ /* Prevent error 'table index is nil' and 'table index is NaN'. */
std::string assignment_str = "[ " +
- ExpressionToString(assignment.key()) + " ]";
+ AllowedIndexExpressionToString(assignment.key()) + " ]";
assignment_str += " = " + ExpressionToString(assignment.value());
return assignment_str;
}