1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

fix(vm): fix saving ret on deep jump (#1487)

This commit is contained in:
Ivan Kalinin 2025-01-24 15:41:43 +01:00 committed by GitHub
parent fe46f0e238
commit 0f6cf13d45
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 2 deletions

View file

@ -247,6 +247,11 @@ int VmState::jump(Ref<Continuation> cont) {
// general jump to continuation cont
int VmState::jump(Ref<Continuation> cont, int pass_args) {
cont = adjust_jump_cont(std::move(cont), pass_args);
return jump_to(std::move(cont));
}
Ref<Continuation> VmState::adjust_jump_cont(Ref<Continuation> cont, int pass_args) {
const ControlData* cont_data = cont->get_cdata();
if (cont_data) {
// first do the checks
@ -287,7 +292,7 @@ int VmState::jump(Ref<Continuation> cont, int pass_args) {
consume_stack_gas(copy);
}
}
return jump_to(std::move(cont));
return cont;
} else {
// have no continuation data, situation is somewhat simpler
if (pass_args >= 0) {
@ -299,7 +304,7 @@ int VmState::jump(Ref<Continuation> cont, int pass_args) {
consume_stack_gas(pass_args);
}
}
return jump_to(std::move(cont));
return cont;
}
}