20b19d4599
Our wrapping optimization relied on the caller context having a TRY block, but each context (including internal calls!) has an exception handling stack of its own, which means that for an invocation stack of entry A.someMethodFromEntry() # this one has a TRY A.internalMethodViaCALL() # this one doesn't B.someMethod() we get `HasTryBlock() == false` for `A.internalMethodViaCALL()` context, which leads to missing wrapper and missing rollbacks if B is to THROW. What this patch does instead is it checks for any context within contract boundaries. Fixes #3045. Signed-off-by: Roman Khimov <roman@nspcc.ru> |
||
---|---|---|
.. | ||
emit | ||
invocations | ||
opcode | ||
stackitem | ||
testdata | ||
vmstate | ||
bench_test.go | ||
context.go | ||
contract_checks.go | ||
contract_checks_test.go | ||
debug_test.go | ||
exception.go | ||
fuzz_test.go | ||
invocation_tree_test.go | ||
json_test.go | ||
opcodebench_test.go | ||
ref_counter.go | ||
ref_counter_test.go | ||
slot.go | ||
slot_test.go | ||
stack.go | ||
stack_test.go | ||
vm.go | ||
vm_test.go |