commit 21a8675b028fc03b840b3d35a78b9658e854c985 from: Sergey Bronnikov date: Wed Jan 31 08:41:55 2024 UTC test/fuzz: fix a group of errors related to `for` Running of automatically generated Lua programs sometimes failed with an errors like: - "'for' initial value must be a" (12%) - "'for' limit must be a" (4.5%) - "'for' step must be a" (0.4%) The patch fixes these errors. NO_CHANGELOG=testing NO_DOC=testing NO_TEST=testing commit - 8e8866f786c55049f5b74fbe5d63feaa481061c0 commit + 21a8675b028fc03b840b3d35a78b9658e854c985 blob - 003658e7a8ce2f9b1f539c44e317c12de83b3dc3 blob + 02e0a1442a5e7f1a76a2c90b790498f3cdf8388b --- test/fuzz/luaL_loadbuffer/serializer.cc +++ test/fuzz/luaL_loadbuffer/serializer.cc @@ -26,6 +26,7 @@ namespace luajit_fuzzer { namespace { const std::string kCounterNamePrefix = "counter_"; +const std::string kNumberWrapperName = "always_number"; PROTO_TOSTRING(Block, block); PROTO_TOSTRING(Chunk, chunk); @@ -115,6 +116,18 @@ PROTO_TOSTRING(UnaryOperator, op); /** Identifier (Name). */ PROTO_TOSTRING(Name, name); +std::string +NumberWrappedExpressionToString(const Expression &expr) +{ + std::string retval; + retval += kNumberWrapperName; + retval += "("; + retval += ExpressionToString(expr); + retval += ")"; + + return retval; +} + /** * Class that controls id creation for counters. Basically, a * variable wrapper that guarantees variable to be incremented. @@ -695,12 +708,14 @@ PROTO_TOSTRING(ForCycleName, forcyclename) std::string forcyclename_str = "for "; forcyclename_str += NameToString(forcyclename.name()); forcyclename_str += " = "; - forcyclename_str += ExpressionToString(forcyclename.startexp()); + forcyclename_str += NumberWrappedExpressionToString( + forcyclename.startexp()); forcyclename_str += ", "; - forcyclename_str += ExpressionToString(forcyclename.stopexp()); + forcyclename_str += NumberWrappedExpressionToString( + forcyclename.stopexp()); if (forcyclename.has_stepexp()) - forcyclename_str += ", " + ExpressionToString( + forcyclename_str += ", " + NumberWrappedExpressionToString( forcyclename.stepexp()); forcyclename_str += " ";