提交 88c89350 编写于 作者: B Bucky Kittinger

Fix start index

上级 7b28e59c
......@@ -79,6 +79,9 @@ namespace eosio { namespace chain { namespace wasm_injections {
if ( module.exports[i].kind == IR::ObjectKind::function )
module.exports[i].index++;
}
// shift the start index by 1
module.startFunctionIndex++;
// shift all table entries for call indirect
for(TableSegment& ts : module.tableSegments) {
for(auto& idx : ts.indices)
......@@ -90,7 +93,7 @@ namespace eosio { namespace chain { namespace wasm_injections {
}
}
};
struct noop_injection_visitor {
static void inject( IR::Module& m );
static void initializer();
......@@ -189,6 +192,7 @@ namespace eosio { namespace chain { namespace wasm_injections {
static void accept( wasm_ops::instr* inst, wasm_ops::visitor_arg& arg ) {
wasm_ops::op_types<>::call_t* call_inst = reinterpret_cast<wasm_ops::op_types<>::call_t*>(inst);
auto mapped_index = injector_utils::injected_index_mapping.find(call_inst->field);
if ( mapped_index != injector_utils::injected_index_mapping.end() ) {
call_inst->field = mapped_index->second;
}
......
......@@ -37,5 +37,4 @@ void max_memory_injection_visitor::initializer() {}
uint32_t instruction_counter::icnt = 0;
int32_t checktime_injector::checktime_idx = -1;
}}} // namespace eosio, chain, injectors
......@@ -16,6 +16,48 @@ static const char f32_add_wast[] = R"=====(
)
)=====";
*/
static const char start_index_wast[] = R"=====(
(module
(import "env" "require_auth" (func $require_auth (param i64)))
(import "env" "eosio_assert" (func $eosio_assert (param i32 i32)))
(import "env" "now" (func $now (result i32)))
(table 0 anyfunc)
(memory $0 1)
(export "memory" (memory $0))
(export "entry" (func $entry))
(export "apply" (func $apply))
(func $entry
(block
(call $eosio_assert
(i32.eq
(i32.load offset=4
(i32.const 0)
)
(call $now)
)
(i32.const 0)
)
)
)
(func $apply (param $0 i64) (param $1 i64) (param $2 i64)
(call $require_auth (i64.const 6121376101093867520))
(block
(call $eosio_assert
(i32.eq
(i32.load offset=4
(i32.const 0)
)
(call $now)
)
(i32.const 0)
)
)
)
(start $entry)
)
)=====";
static const char entry_wast[] = R"=====(
(module
(import "env" "require_auth" (func $require_auth (param i64)))
......
......@@ -612,6 +612,31 @@ BOOST_FIXTURE_TEST_CASE( check_entry_behavior, TESTER ) try {
BOOST_CHECK_EQUAL(transaction_receipt::executed, receipt.status);
} FC_LOG_AND_RETHROW()
BOOST_FIXTURE_TEST_CASE( check_start_index_behavior, TESTER ) try {
produce_blocks(2);
create_accounts( {N(check)} );
produce_block();
set_code(N(check), start_index_wast);
produce_blocks(10);
signed_transaction trx;
action act;
act.account = N(check);
act.name = N();
act.authorization = vector<permission_level>{{N(check),config::active_name}};
trx.actions.push_back(act);
set_transaction_headers(trx);
trx.sign(get_private_key( N(check), "active" ), chain_id_type());
push_transaction(trx);
produce_blocks(1);
BOOST_REQUIRE_EQUAL(true, chain_has_transaction(trx.id()));
const auto& receipt = get_transaction_receipt(trx.id());
BOOST_CHECK_EQUAL(transaction_receipt::executed, receipt.status);
} FC_LOG_AND_RETHROW()
/**
* Ensure we can load a wasm w/o memory
*/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册