mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Disallow recursive library cells (#868)
* Disallow recursive library cells * Stop emulation of external messages on accept --------- Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
parent
128a85bee5
commit
42d4c051ef
7 changed files with 50 additions and 0 deletions
|
@ -1056,6 +1056,7 @@ std::ostream& operator<<(std::ostream& os, Ref<CellSlice> cs_ref) {
|
|||
// If can_be_special is not null, then it is allowed to load special cell
|
||||
// Flag whether loaded cell is actually special will be stored into can_be_special
|
||||
VirtualCell::LoadedCell load_cell_slice_impl(Ref<Cell> cell, bool* can_be_special) {
|
||||
bool library_loaded = false;
|
||||
while (true) {
|
||||
auto* vm_state_interface = VmStateInterface::get();
|
||||
if (vm_state_interface) {
|
||||
|
@ -1076,6 +1077,10 @@ VirtualCell::LoadedCell load_cell_slice_impl(Ref<Cell> cell, bool* can_be_specia
|
|||
*can_be_special = loaded_cell.data_cell->is_special();
|
||||
} else if (loaded_cell.data_cell->is_special()) {
|
||||
if (loaded_cell.data_cell->special_type() == DataCell::SpecialType::Library) {
|
||||
if (library_loaded) {
|
||||
throw VmError{Excno::cell_und, "failed to load library cell: recursive library cells are not allowed"};
|
||||
}
|
||||
library_loaded = true;
|
||||
if (vm_state_interface) {
|
||||
CellSlice cs(std::move(loaded_cell));
|
||||
DCHECK(cs.size() == Cell::hash_bits + 8);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue