diff options
author | Valentin Wüstholz <wuestholz@users.noreply.github.com> | 2017-01-08 08:18:22 +0800 |
---|---|---|
committer | Felix Lange <fjl@users.noreply.github.com> | 2017-01-08 08:18:22 +0800 |
commit | 0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe (patch) | |
tree | 368403ca8f9065bf62e2a972a03974eeaa7d5e52 /cmd | |
parent | 17182732f50c9cd209a0472bf0944c4029335f14 (diff) | |
download | dexon-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.gz dexon-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.zst dexon-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.zip |
cmd/disasm: fix array-out-of-bounds error (#3491)
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/disasm/main.go | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/cmd/disasm/main.go b/cmd/disasm/main.go index 41cad0231..e6a9a6676 100644 --- a/cmd/disasm/main.go +++ b/cmd/disasm/main.go @@ -42,15 +42,19 @@ func main() { for pc := uint64(0); pc < uint64(len(code)); pc++ { op := vm.OpCode(code[pc]) - fmt.Printf("%-5d %v", pc, op) switch op { case vm.PUSH1, vm.PUSH2, vm.PUSH3, vm.PUSH4, vm.PUSH5, vm.PUSH6, vm.PUSH7, vm.PUSH8, vm.PUSH9, vm.PUSH10, vm.PUSH11, vm.PUSH12, vm.PUSH13, vm.PUSH14, vm.PUSH15, vm.PUSH16, vm.PUSH17, vm.PUSH18, vm.PUSH19, vm.PUSH20, vm.PUSH21, vm.PUSH22, vm.PUSH23, vm.PUSH24, vm.PUSH25, vm.PUSH26, vm.PUSH27, vm.PUSH28, vm.PUSH29, vm.PUSH30, vm.PUSH31, vm.PUSH32: a := uint64(op) - uint64(vm.PUSH1) + 1 - fmt.Printf(" => %x", code[pc+1:pc+1+a]) - + u := pc + 1 + a + if uint64(len(code)) <= pc || uint64(len(code)) < u { + fmt.Printf("Error: incomplete push instruction at %v\n", pc) + return + } + fmt.Printf("%-5d %v => %x\n", pc, op, code[pc+1:u]) pc += a + default: + fmt.Printf("%-5d %v\n", pc, op) } - fmt.Println() } } |