mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Validate Merkle proofs and updates in TLB validate (#1479)
* Validate Merkle proofs and updates in TLB validate * Fix out-of-bound access in tl_jni_object.cpp
This commit is contained in:
parent
987c7ca04b
commit
710514b8f1
4 changed files with 11 additions and 4 deletions
|
@ -296,7 +296,7 @@ transaction$0111 account_addr:bits256 lt:uint64
|
|||
total_fees:CurrencyCollection state_update:^(HASH_UPDATE Account)
|
||||
description:^TransactionDescr = Transaction;
|
||||
|
||||
!merkle_update#02 {X:Type} old_hash:bits256 new_hash:bits256
|
||||
!merkle_update#04 {X:Type} old_hash:bits256 new_hash:bits256 old_depth:uint16 new_depth:uint16
|
||||
old:^X new:^X = MERKLE_UPDATE X;
|
||||
update_hashes#72 {X:Type} old_hash:bits256 new_hash:bits256
|
||||
= HASH_UPDATE X;
|
||||
|
|
|
@ -2074,7 +2074,7 @@ void CppTypeCode::generate_skip_field(const Constructor& constr, const Field& fi
|
|||
output_cpp_expr(ss, expr, 100);
|
||||
ss << '.';
|
||||
}
|
||||
ss << "validate_skip_ref(ops, cs, weak)" << tail;
|
||||
ss << "validate_skip_ref(ops, cs, " << (constr.is_special ? "true" : "weak") << ")" << tail;
|
||||
actions += Action{ss.str()};
|
||||
}
|
||||
|
||||
|
|
|
@ -133,7 +133,13 @@ bool TLB::validate_ref_internal(int* ops, Ref<vm::Cell> cell_ref, bool weak) con
|
|||
}
|
||||
bool is_special;
|
||||
auto cs = load_cell_slice_special(std::move(cell_ref), is_special);
|
||||
return always_special() ? is_special : (is_special ? weak : (validate_skip(ops, cs) && cs.empty_ext()));
|
||||
if (cs.special_type() == vm::Cell::SpecialType::PrunnedBranch && weak) {
|
||||
return true;
|
||||
}
|
||||
if (always_special() != is_special) {
|
||||
return false;
|
||||
}
|
||||
return validate_skip(ops, cs, weak) && cs.empty_ext();
|
||||
}
|
||||
|
||||
bool TLB::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue