mirror of
https://github.com/Xahau/xahaud.git
synced 2026-07-28 09:30:10 +00:00
add max state object modification test to state_set unit test
This commit is contained in:
@@ -1342,22 +1342,4 @@ validateGuards(
|
||||
|
||||
return std::pair<uint64_t, uint64_t>{maxInstrCountHook, maxInstrCountCbak};
|
||||
|
||||
/*
|
||||
GUARDLOG(hook::log::WASM_SMOKE_TEST)
|
||||
<< "Trying to wasm instantiate proposed hook "
|
||||
<< "size = " << hook.size() << "\n";
|
||||
|
||||
std::optional<std::string> result =
|
||||
hook::HookExecutor::validateWasm(hook.data(), (size_t)hook.size());
|
||||
|
||||
if (result)
|
||||
{
|
||||
GUARDLOG(hook::log::WASM_TEST_FAILURE)
|
||||
<< "Tried to set a hook with invalid code. VM error: "
|
||||
<< *result << "\n";
|
||||
return {};
|
||||
}
|
||||
*/
|
||||
|
||||
return std::pair<uint64_t, uint64_t>{maxInstrCountHook, maxInstrCountCbak};
|
||||
}
|
||||
|
||||
@@ -1535,7 +1535,7 @@ finalizeHookState(
|
||||
if (is_modified)
|
||||
{
|
||||
changeCount++;
|
||||
if (changeCount >= 0xFFFFU) // RH TODO: limit the max number of state changes?
|
||||
if (changeCount > max_state_modifications + 1)
|
||||
{
|
||||
// overflow
|
||||
JLOG(j.warn())
|
||||
|
||||
@@ -8195,11 +8195,15 @@ public:
|
||||
auto const bob = Account{"bob"};
|
||||
auto const alice = Account{"alice"};
|
||||
auto const cho = Account{"cho"};
|
||||
auto const david = Account{"david"};
|
||||
auto const eve = Account{"eve"}; // small balance
|
||||
auto const frank = Account{"frank"}; // big balance
|
||||
env.fund(XRP(10000), alice);
|
||||
env.fund(XRP(10000), bob);
|
||||
env.fund(XRP(10000), cho);
|
||||
|
||||
|
||||
env.fund(XRP(1000000), david);
|
||||
env.fund(XRP(2600), eve);
|
||||
env.fund(XRP(1000000000), frank);
|
||||
|
||||
// install a rollback hook on cho
|
||||
env(ripple::test::jtx::hook(cho, {{hso(rollback_wasm, overrideFlag)}}, 0),
|
||||
@@ -8755,11 +8759,143 @@ public:
|
||||
BEAST_EXPECT((*env.le("alice"))[sfOwnerCount] == 3);
|
||||
|
||||
}
|
||||
|
||||
// check reserve exhaustion
|
||||
TestHook exhaustion_wasm = wasm[R"[test.hook](
|
||||
#include <stdint.h>
|
||||
#define sfInvoiceID ((5U << 16U) + 17U)
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
#define GUARD(maxiter) _g((1ULL << 31U) + __LINE__, (maxiter)+1)
|
||||
extern int64_t accept (uint32_t read_ptr, uint32_t read_len, int64_t error_code);
|
||||
extern int64_t rollback (uint32_t read_ptr, uint32_t read_len, int64_t error_code);
|
||||
extern int64_t otxn_field (uint32_t, uint32_t, uint32_t);
|
||||
extern int64_t otxn_id(uint32_t, uint32_t, uint32_t);
|
||||
extern int64_t state_set (
|
||||
uint32_t, uint32_t, uint32_t, uint32_t
|
||||
);
|
||||
extern int64_t hook_pos(void);
|
||||
#define SBUF(x) (uint32_t)(x), sizeof(x)
|
||||
#define ASSERT(x)\
|
||||
if (!(x))\
|
||||
rollback((uint32_t)#x, sizeof(#x), __LINE__);
|
||||
|
||||
int64_t hook(uint32_t reserved )
|
||||
{
|
||||
_g(1,1);
|
||||
|
||||
// get this transaction id
|
||||
uint8_t txn[32];
|
||||
ASSERT(otxn_id(SBUF(txn), 0) == 32);
|
||||
|
||||
// get the invoice id, which contains the grantor account
|
||||
uint8_t grantor[32];
|
||||
ASSERT(otxn_field(SBUF(grantor), sfInvoiceID) == 32);
|
||||
|
||||
uint16_t iterations = (((uint16_t)grantor[0]) << 8U) + ((uint16_t)grantor[1]);
|
||||
|
||||
uint8_t p = hook_pos();
|
||||
for (uint16_t i = 0; GUARD(1500), i < iterations; ++i)
|
||||
{
|
||||
*((uint16_t*)txn) = i;
|
||||
txn[2] = (uint8_t)p;
|
||||
ASSERT(state_set(SBUF(txn), SBUF(txn)) == 32);
|
||||
}
|
||||
|
||||
return accept(0,0,0);
|
||||
}
|
||||
)[test.hook]"];
|
||||
|
||||
HASH_WASM(exhaustion);
|
||||
|
||||
// install the exhaustion hook on eve
|
||||
{
|
||||
Json::Value json = ripple::test::jtx::hook(eve, {{hso(exhaustion_wasm, overrideFlag)}}, 0);
|
||||
|
||||
env(json,
|
||||
M("set state_set 6"),
|
||||
HSFEE);
|
||||
env.close();
|
||||
}
|
||||
|
||||
// now invoke repeatedly until exhaustion is reached
|
||||
{
|
||||
|
||||
Json::Value json = pay(david, eve, XRP(1));
|
||||
json[jss::InvoiceID] = "0001" + std::string(60, '0');
|
||||
|
||||
// 2500 xrp less 1 account reserve (200) divided by 50xrp per object reserve = 46 objects
|
||||
// of these we already have: 1 hook, so 45 objects can be allocated
|
||||
env(json, fee(XRP(1)),
|
||||
M("test state_set 7"),
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
BEAST_EXPECT((*env.le("eve"))[sfOwnerCount] == 2);
|
||||
|
||||
// now we have allocated 1 state object, so 44 more can be allocated
|
||||
|
||||
// try to set 45 state entries, this will fail
|
||||
json[jss::InvoiceID] = "002D" + std::string(60, '0');
|
||||
env(json, fee(XRP(1)),
|
||||
M("test state_set 8"),
|
||||
ter(tecHOOK_REJECTED));
|
||||
env.close();
|
||||
BEAST_EXPECT((*env.le("eve"))[sfOwnerCount] == 2);
|
||||
|
||||
|
||||
// try to set 44 state objects, this will succeed
|
||||
json[jss::InvoiceID] = "002C" + std::string(60, '0');
|
||||
env(json, fee(XRP(1)),
|
||||
M("test state_set 9"),
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
BEAST_EXPECT((*env.le("eve"))[sfOwnerCount] == 46);
|
||||
|
||||
|
||||
// try to set one state object, this will fail
|
||||
env(json, fee(XRP(1)),
|
||||
M("test state_set 10"),
|
||||
ter(tecHOOK_REJECTED));
|
||||
env.close();
|
||||
BEAST_EXPECT((*env.le("eve"))[sfOwnerCount] == 46);
|
||||
}
|
||||
|
||||
// test maximum state modification
|
||||
{
|
||||
// install the hook into every position on frank
|
||||
env(ripple::test::jtx::hook(
|
||||
frank, {{
|
||||
hso(exhaustion_wasm),
|
||||
hso(exhaustion_wasm),
|
||||
hso(exhaustion_wasm),
|
||||
hso(exhaustion_wasm)
|
||||
}}, 0),
|
||||
M("set state_set 11"),
|
||||
HSFEE,
|
||||
ter(tesSUCCESS));
|
||||
|
||||
Json::Value json = pay(david, frank, XRP(1));
|
||||
|
||||
// we can modify 1500 entries at a time with the hook, but first we want to test too many modifications
|
||||
// so we will do 1251 which times 4 executions is 5005
|
||||
json[jss::InvoiceID] = "04E3" + std::string(60, '0');
|
||||
env(json, fee(XRP(1)),
|
||||
M("test state_set 12"),
|
||||
ter(tecHOOK_REJECTED));
|
||||
env.close();
|
||||
BEAST_EXPECT((*env.le("frank"))[sfOwnerCount] == 4);
|
||||
|
||||
// now we will do 1250 which is exactly 5000, which should be accepted
|
||||
json[jss::InvoiceID] = "04E2" + std::string(60, '0');
|
||||
env(json, fee(XRP(1)),
|
||||
M("test state_set 13"),
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
std::cout << "frank ownercount: " << (*env.le("frank"))[sfOwnerCount] << "\n";
|
||||
BEAST_EXPECT((*env.le("frank"))[sfOwnerCount] == 5004);
|
||||
}
|
||||
|
||||
// RH TODO:
|
||||
// check state can be set on emit callback
|
||||
// check reserve - cant make new state object if reserve insufficient
|
||||
// try creating many new state objects
|
||||
// check namespacing provides for non-collision of same key
|
||||
|
||||
}
|
||||
|
||||
@@ -9989,6 +9989,87 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
}},
|
||||
|
||||
/* ==== WASM: 69 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
#define sfInvoiceID ((5U << 16U) + 17U)
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
#define GUARD(maxiter) _g((1ULL << 31U) + __LINE__, (maxiter)+1)
|
||||
extern int64_t accept (uint32_t read_ptr, uint32_t read_len, int64_t error_code);
|
||||
extern int64_t rollback (uint32_t read_ptr, uint32_t read_len, int64_t error_code);
|
||||
extern int64_t otxn_field (uint32_t, uint32_t, uint32_t);
|
||||
extern int64_t otxn_id(uint32_t, uint32_t, uint32_t);
|
||||
extern int64_t state_set (
|
||||
uint32_t, uint32_t, uint32_t, uint32_t
|
||||
);
|
||||
extern int64_t hook_pos(void);
|
||||
#define SBUF(x) (uint32_t)(x), sizeof(x)
|
||||
#define ASSERT(x)\
|
||||
if (!(x))\
|
||||
rollback((uint32_t)#x, sizeof(#x), __LINE__);
|
||||
|
||||
int64_t hook(uint32_t reserved )
|
||||
{
|
||||
_g(1,1);
|
||||
|
||||
// get this transaction id
|
||||
uint8_t txn[32];
|
||||
ASSERT(otxn_id(SBUF(txn), 0) == 32);
|
||||
|
||||
// get the invoice id, which contains the grantor account
|
||||
uint8_t grantor[32];
|
||||
ASSERT(otxn_field(SBUF(grantor), sfInvoiceID) == 32);
|
||||
|
||||
uint16_t iterations = (((uint16_t)grantor[0]) << 8U) + ((uint16_t)grantor[1]);
|
||||
|
||||
uint8_t p = hook_pos();
|
||||
for (uint16_t i = 0; GUARD(1500), i < iterations; ++i)
|
||||
{
|
||||
*((uint16_t*)txn) = i;
|
||||
txn[2] = (uint8_t)p;
|
||||
ASSERT(state_set(SBUF(txn), SBUF(txn)) == 32);
|
||||
}
|
||||
|
||||
return accept(0,0,0);
|
||||
}
|
||||
)[test.hook]",
|
||||
{
|
||||
0x00U,0x61U,0x73U,0x6DU,0x01U,0x00U,0x00U,0x00U,0x01U,0x26U,0x06U,0x60U,0x02U,0x7FU,0x7FU,0x01U,0x7FU,0x60U,0x03U,
|
||||
0x7FU,0x7FU,0x7FU,0x01U,0x7EU,0x60U,0x03U,0x7FU,0x7FU,0x7EU,0x01U,0x7EU,0x60U,0x00U,0x01U,0x7EU,0x60U,0x04U,0x7FU,
|
||||
0x7FU,0x7FU,0x7FU,0x01U,0x7EU,0x60U,0x01U,0x7FU,0x01U,0x7EU,0x02U,0x64U,0x07U,0x03U,0x65U,0x6EU,0x76U,0x02U,0x5FU,
|
||||
0x67U,0x00U,0x00U,0x03U,0x65U,0x6EU,0x76U,0x07U,0x6FU,0x74U,0x78U,0x6EU,0x5FU,0x69U,0x64U,0x00U,0x01U,0x03U,0x65U,
|
||||
0x6EU,0x76U,0x08U,0x72U,0x6FU,0x6CU,0x6CU,0x62U,0x61U,0x63U,0x6BU,0x00U,0x02U,0x03U,0x65U,0x6EU,0x76U,0x0AU,0x6FU,
|
||||
0x74U,0x78U,0x6EU,0x5FU,0x66U,0x69U,0x65U,0x6CU,0x64U,0x00U,0x01U,0x03U,0x65U,0x6EU,0x76U,0x08U,0x68U,0x6FU,0x6FU,
|
||||
0x6BU,0x5FU,0x70U,0x6FU,0x73U,0x00U,0x03U,0x03U,0x65U,0x6EU,0x76U,0x09U,0x73U,0x74U,0x61U,0x74U,0x65U,0x5FU,0x73U,
|
||||
0x65U,0x74U,0x00U,0x04U,0x03U,0x65U,0x6EU,0x76U,0x06U,0x61U,0x63U,0x63U,0x65U,0x70U,0x74U,0x00U,0x02U,0x03U,0x02U,
|
||||
0x01U,0x05U,0x05U,0x03U,0x01U,0x00U,0x02U,0x06U,0x21U,0x05U,0x7FU,0x01U,0x41U,0xF0U,0x88U,0x04U,0x0BU,0x7FU,0x00U,
|
||||
0x41U,0xEFU,0x08U,0x0BU,0x7FU,0x00U,0x41U,0x80U,0x08U,0x0BU,0x7FU,0x00U,0x41U,0xF0U,0x88U,0x04U,0x0BU,0x7FU,0x00U,
|
||||
0x41U,0x80U,0x08U,0x0BU,0x07U,0x08U,0x01U,0x04U,0x68U,0x6FU,0x6FU,0x6BU,0x00U,0x07U,0x0AU,0xB2U,0x82U,0x00U,0x01U,
|
||||
0xAEU,0x82U,0x00U,0x03U,0x03U,0x7FU,0x01U,0x7EU,0x01U,0x7FU,0x23U,0x80U,0x80U,0x80U,0x80U,0x00U,0x41U,0xC0U,0x00U,
|
||||
0x6BU,0x22U,0x01U,0x24U,0x80U,0x80U,0x80U,0x80U,0x00U,0x41U,0x01U,0x41U,0x01U,0x10U,0x80U,0x80U,0x80U,0x80U,0x00U,
|
||||
0x1AU,0x02U,0x40U,0x20U,0x01U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x41U,0x00U,0x10U,0x81U,0x80U,0x80U,0x80U,0x00U,0x42U,
|
||||
0x20U,0x51U,0x0DU,0x00U,0x41U,0x80U,0x88U,0x80U,0x80U,0x00U,0x41U,0x1CU,0x42U,0x19U,0x10U,0x82U,0x80U,0x80U,0x80U,
|
||||
0x00U,0x1AU,0x0BU,0x02U,0x40U,0x20U,0x01U,0x41U,0x20U,0x41U,0x91U,0x80U,0x14U,0x10U,0x83U,0x80U,0x80U,0x80U,0x00U,
|
||||
0x42U,0x20U,0x51U,0x0DU,0x00U,0x41U,0x9CU,0x88U,0x80U,0x80U,0x00U,0x41U,0x2DU,0x42U,0x1DU,0x10U,0x82U,0x80U,0x80U,
|
||||
0x80U,0x00U,0x1AU,0x0BU,0x20U,0x01U,0x2DU,0x00U,0x01U,0x21U,0x02U,0x20U,0x01U,0x2DU,0x00U,0x00U,0x21U,0x03U,0x10U,
|
||||
0x84U,0x80U,0x80U,0x80U,0x00U,0x21U,0x04U,0x41U,0xA2U,0x80U,0x80U,0x80U,0x78U,0x41U,0xDDU,0x0BU,0x10U,0x80U,0x80U,
|
||||
0x80U,0x80U,0x00U,0x1AU,0x02U,0x40U,0x20U,0x02U,0x20U,0x03U,0x41U,0x08U,0x74U,0x72U,0x22U,0x03U,0x45U,0x0DU,0x00U,
|
||||
0x20U,0x04U,0xA7U,0x21U,0x05U,0x41U,0x00U,0x21U,0x02U,0x03U,0x40U,0x41U,0xA2U,0x80U,0x80U,0x80U,0x78U,0x41U,0xDDU,
|
||||
0x0BU,0x10U,0x80U,0x80U,0x80U,0x80U,0x00U,0x1AU,0x20U,0x01U,0x20U,0x05U,0x3AU,0x00U,0x22U,0x20U,0x01U,0x20U,0x02U,
|
||||
0x3BU,0x01U,0x20U,0x02U,0x40U,0x20U,0x01U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x20U,0x01U,0x41U,0x20U,0x6AU,0x41U,0x20U,
|
||||
0x10U,0x85U,0x80U,0x80U,0x80U,0x00U,0x42U,0x20U,0x51U,0x0DU,0x00U,0x41U,0xC9U,0x88U,0x80U,0x80U,0x00U,0x41U,0x26U,
|
||||
0x42U,0x26U,0x10U,0x82U,0x80U,0x80U,0x80U,0x00U,0x1AU,0x0BU,0x20U,0x03U,0x20U,0x02U,0x41U,0x01U,0x6AU,0x22U,0x02U,
|
||||
0x41U,0xFFU,0xFFU,0x03U,0x71U,0x4BU,0x0DU,0x00U,0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x42U,0x00U,0x10U,0x86U,0x80U,
|
||||
0x80U,0x80U,0x00U,0x21U,0x04U,0x20U,0x01U,0x41U,0xC0U,0x00U,0x6AU,0x24U,0x80U,0x80U,0x80U,0x80U,0x00U,0x20U,0x04U,
|
||||
0x0BU,0x0BU,0x76U,0x01U,0x00U,0x41U,0x80U,0x08U,0x0BU,0x6FU,0x6FU,0x74U,0x78U,0x6EU,0x5FU,0x69U,0x64U,0x28U,0x53U,
|
||||
0x42U,0x55U,0x46U,0x28U,0x74U,0x78U,0x6EU,0x29U,0x2CU,0x20U,0x30U,0x29U,0x20U,0x3DU,0x3DU,0x20U,0x33U,0x32U,0x00U,
|
||||
0x6FU,0x74U,0x78U,0x6EU,0x5FU,0x66U,0x69U,0x65U,0x6CU,0x64U,0x28U,0x53U,0x42U,0x55U,0x46U,0x28U,0x67U,0x72U,0x61U,
|
||||
0x6EU,0x74U,0x6FU,0x72U,0x29U,0x2CU,0x20U,0x73U,0x66U,0x49U,0x6EU,0x76U,0x6FU,0x69U,0x63U,0x65U,0x49U,0x44U,0x29U,
|
||||
0x20U,0x3DU,0x3DU,0x20U,0x33U,0x32U,0x00U,0x73U,0x74U,0x61U,0x74U,0x65U,0x5FU,0x73U,0x65U,0x74U,0x28U,0x53U,0x42U,
|
||||
0x55U,0x46U,0x28U,0x74U,0x78U,0x6EU,0x29U,0x2CU,0x20U,0x53U,0x42U,0x55U,0x46U,0x28U,0x74U,0x78U,0x6EU,0x29U,0x29U,
|
||||
0x20U,0x3DU,0x3DU,0x20U,0x33U,0x32U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 70 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -10393,7 +10474,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 70 ==== */
|
||||
/* ==== WASM: 71 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -10633,7 +10714,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x3DU,0x3DU,0x20U,0x30U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 71 ==== */
|
||||
/* ==== WASM: 72 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -10730,7 +10811,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x44U,0x4FU,0x45U,0x53U,0x4EU,0x54U,0x5FU,0x45U,0x58U,0x49U,0x53U,0x54U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 72 ==== */
|
||||
/* ==== WASM: 73 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -10852,7 +10933,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x58U,0x49U,0x53U,0x54U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 73 ==== */
|
||||
/* ==== WASM: 74 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -10960,7 +11041,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x20U,0x3DU,0x3DU,0x20U,0x30U,0x00U,0x22U,0x00U,0x00U,0x00U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 74 ==== */
|
||||
/* ==== WASM: 75 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -11025,7 +11106,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x65U,0x28U,0x30U,0x2CU,0x31U,0x2CU,0x32U,0x2CU,0x33U,0x2CU,0x31U,0x29U,0x20U,0x3DU,0x3DU,0x20U,0x30U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 75 ==== */
|
||||
/* ==== WASM: 76 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -11068,7 +11149,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x5FU,0x42U,0x4FU,0x55U,0x4EU,0x44U,0x53U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 76 ==== */
|
||||
/* ==== WASM: 77 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -11111,7 +11192,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x53U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 77 ==== */
|
||||
/* ==== WASM: 78 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -12192,7 +12273,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x30U,0x29U,0x20U,0x3DU,0x3DU,0x20U,0x54U,0x4FU,0x4FU,0x5FU,0x53U,0x4DU,0x41U,0x4CU,0x4CU,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 78 ==== */
|
||||
/* ==== WASM: 79 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -13128,7 +13209,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x6EU,0x73U,0x29U,0x2CU,0x20U,0x30U,0x2CU,0x30U,0x20U,0x29U,0x29U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 79 ==== */
|
||||
/* ==== WASM: 80 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -14878,7 +14959,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x41U,0x4CU,0x4CU,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 80 ==== */
|
||||
/* ==== WASM: 81 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -16080,7 +16161,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x32U,0x30U,0x29U,0x20U,0x3DU,0x3DU,0x20U,0x54U,0x4FU,0x4FU,0x5FU,0x53U,0x4DU,0x41U,0x4CU,0x4CU,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 81 ==== */
|
||||
/* ==== WASM: 82 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -16275,7 +16356,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x75U,0x62U,0x6BU,0x65U,0x79U,0x5FU,0x65U,0x64U,0x29U,0x29U,0x20U,0x3DU,0x3DU,0x20U,0x30U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 82 ==== */
|
||||
/* ==== WASM: 83 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -16297,7 +16378,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x00U,0x10U,0x81U,0x80U,0x80U,0x80U,0x00U,0x0BU,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 83 ==== */
|
||||
/* ==== WASM: 84 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -16321,7 +16402,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x80U,0x08U,0x0BU,0x0EU,0x48U,0x6FU,0x6FU,0x6BU,0x20U,0x52U,0x65U,0x6AU,0x65U,0x63U,0x74U,0x65U,0x64U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 84 ==== */
|
||||
/* ==== WASM: 85 ==== */
|
||||
{ R"[test.hook](
|
||||
(module
|
||||
(type (;0;) (func (param i32 i32 i64) (result i64)))
|
||||
@@ -16344,7 +16425,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x42U,0x00U,0x10U,0x00U,0x0BU,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 85 ==== */
|
||||
/* ==== WASM: 86 ==== */
|
||||
{ R"[test.hook](
|
||||
(module
|
||||
(type (;0;) (func (param i32 i32) (result i32)))
|
||||
@@ -16389,7 +16470,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x0BU,0x09U,0x00U,0x41U,0x01U,0x41U,0x01U,0x10U,0x00U,0x1AU,0x0BU,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 86 ==== */
|
||||
/* ==== WASM: 87 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -19895,7 +19976,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x33U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 87 ==== */
|
||||
/* ==== WASM: 88 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
@@ -19928,7 +20009,7 @@ std::map<std::string, std::vector<uint8_t>> wasm = {
|
||||
0x00U,0x41U,0x80U,0x08U,0x0BU,0x06U,0x76U,0x61U,0x6CU,0x75U,0x65U,0x00U,
|
||||
}},
|
||||
|
||||
/* ==== WASM: 88 ==== */
|
||||
/* ==== WASM: 89 ==== */
|
||||
{ R"[test.hook](
|
||||
#include <stdint.h>
|
||||
extern int32_t _g (uint32_t id, uint32_t maxiter);
|
||||
|
||||
Reference in New Issue
Block a user