Skip to content

Commit 8a0c449

Browse files
authored
[interpreter] Catch negative skip in decoder (#698)
1 parent 0226eb3 commit 8a0c449

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

interpreter/binary/decode.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ let pos s = !(s.pos)
1616
let eos s = (pos s = len s)
1717

1818
let check n s = if pos s + n > len s then raise EOS
19-
let skip n s = check n s; s.pos := !(s.pos) + n
19+
let skip n s = if n < 0 then raise EOS else check n s; s.pos := !(s.pos) + n
2020

2121
let read s = Char.code (s.bytes.[!(s.pos)])
2222
let peek s = if eos s then None else Some (read s)
@@ -39,7 +39,7 @@ let error s pos msg = raise (Code (region s pos pos, msg))
3939
let require b s pos msg = if not b then error s pos msg
4040

4141
let guard f s =
42-
try f s with EOS -> error s (len s) "unexpected end of binary or function"
42+
try f s with EOS -> error s (len s) "unexpected end of section or function"
4343

4444
let get = guard get
4545
let get_string n = guard (get_string n)

test/core/custom_section.wast renamed to test/core/custom.wast

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@
7373
"unexpected end"
7474
)
7575

76+
(assert_malformed
77+
(module binary
78+
"\00asm" "\01\00\00\00"
79+
"\00\00\00\05\01\00\07\00\00"
80+
)
81+
"unexpected end"
82+
)
83+
7684
(assert_malformed
7785
(module binary
7886
"\00asm" "\01\00\00\00"

0 commit comments

Comments
 (0)