neo-go/pkg/vm
Roman Khimov e34fa2e915 stackitem: limit JSONization nesting level
We can have very deep reference types and attempt to JSONize them can easily
lead to OOM (even though there are no recursive references inside). Therefore
we have to limit them. While regular ToJSON() is buffer size limited to
MaxSize, ToJSONWithTypes is not and limiting it to MaxSize output will require
substantial rewriting effort while not really providing fair result, MaxSize
is more about stack item size while its JSON representation can be much bigger
because of various overheads.

Initial thought was to limit it by element count based on
MaxIteratorResultItems, but the problem here is that we don't always have this
limit in contexts using ToJSONWithTypes (like notification event
marshaling). Thus we need some generic limit which would be fine for all
users.

We at the same time have maxJSONDepth used when deserializing from JSON, so
it can be used for marshaling as well, it's not often that we have deeper
structures in real results.

Inspired by neo-project/neo#2521.
2021-07-06 17:33:16 +03:00
..
cli vm: increase waiting time for vm cli program 2021-06-01 16:29:08 +03:00
emit vm: allow emit.Array handle uint256 2021-04-16 16:20:30 +03:00
opcode *: enable godot linter and fix all its warnings 2021-05-12 23:17:03 +03:00
stackitem stackitem: limit JSONization nesting level 2021-07-06 17:33:16 +03:00
testdata opcode: fix GTE, LTE string representations 2021-04-29 16:08:48 +03:00
context.go vm: add instruction correctness check 2021-02-09 22:31:26 +03:00
contract_checks.go core: rename Neo.Crypto.CheckMultisig interop 2021-05-11 18:38:14 +03:00
contract_checks_test.go core: refactor Neo.Crypto.CheckMultisigWithECDsaSecpr1 2021-03-10 21:46:05 +03:00
debug_test.go vm: fix debugger and add tests 2020-08-18 11:26:27 +03:00
exception.go stackitem: change Bool() to TryBool(), prepare for its failures 2020-08-21 20:55:20 +03:00
interop.go interop: remove System.Iterator.Create, fix #1935 2021-05-11 12:13:30 +03:00
json_test.go vm: simplify some test code 2021-05-12 18:44:35 +03:00
opcodebench_test.go opcode: fix GTE, LTE string representations 2021-04-29 16:08:48 +03:00
ref_counter.go vm: move StackItem to a separate package 2020-06-08 13:27:08 +03:00
ref_counter_test.go vm: move StackItem to a separate package 2020-06-08 13:27:08 +03:00
slot.go vm: allow to initialize static slot in method 2020-07-27 13:00:35 +03:00
slot_test.go vm: allow to initialize static slot in method 2020-07-27 13:00:35 +03:00
stack.go vm: optimize reversing items on the stack 2020-10-15 16:19:59 +03:00
stack_test.go vm: allow to convert stack to a slice 2020-07-31 16:07:16 +03:00
state.go remove github.com/pkg/errors from dependencies 2020-08-07 12:21:52 +03:00
state_test.go core, vm: store VMState as byte instead of string 2020-07-29 10:14:08 +03:00
vm.go vm, cli: allow to specify flags while loading VM 2021-05-28 12:07:41 +03:00
vm_test.go *: enable godot linter and fix all its warnings 2021-05-12 23:17:03 +03:00