aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorValentin Wüstholz <wuestholz@users.noreply.github.com>2017-01-08 08:18:22 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-01-08 08:18:22 +0800
commit0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe (patch)
tree368403ca8f9065bf62e2a972a03974eeaa7d5e52 /cmd
parent17182732f50c9cd209a0472bf0944c4029335f14 (diff)
downloadgo-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar
go-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.gz
go-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.bz2
go-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.lz
go-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.xz
go-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.tar.zst
go-tangerine-0a5450fe0453d2a443dfca50d1106b9dbdb7a8fe.zip
cmd/disasm: fix array-out-of-bounds error (#3491)
Diffstat (limited to 'cmd')
-rw-r--r--cmd/disasm/main.go12
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()
}
}