Skip to content

Commit b226579

Browse files
committed
fix
1 parent 70851ec commit b226579

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

vlib/strings/textscanner/textscanner.v

+16-14
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,15 @@ pub fn (ss &TextScanner) peek_u8() u8 {
132132
// ts.peek_n(1) == ts.peek() .
133133
@[direct_array_access; inline]
134134
pub fn (ss &TextScanner) peek_n(n int) int {
135-
if ss.pos + n < ss.ilen {
136-
if ss.config.force_rune_mode {
137-
return int(ss.input_runes[ss.pos + n])
138-
} else {
139-
return ss.input_bytes[ss.pos + n]
140-
}
135+
new_pos := ss.pos + n
136+
if new_pos < 0 || new_pos >= ss.ilen {
137+
return -1
138+
}
139+
if ss.config.force_rune_mode {
140+
return int(ss.input_runes[ss.pos + n])
141+
} else {
142+
return ss.input_bytes[ss.pos + n]
141143
}
142-
return -1
143144
}
144145

145146
// peek_n_u8 returns the character code from the input text, at position + `n`,
@@ -149,14 +150,15 @@ pub fn (ss &TextScanner) peek_n(n int) int {
149150
// legitimately contain bytes with value `0`.
150151
@[direct_array_access; inline]
151152
pub fn (ss &TextScanner) peek_n_u8(n int) u8 {
152-
if ss.pos + n < ss.ilen {
153-
if ss.config.force_rune_mode {
154-
return u8(ss.input_runes[ss.pos + n])
155-
} else {
156-
return ss.input_bytes[ss.pos + n]
157-
}
153+
new_pos := ss.pos + n
154+
if new_pos < 0 || new_pos >= ss.ilen {
155+
return 0
156+
}
157+
if ss.config.force_rune_mode {
158+
return u8(ss.input_runes[ss.pos + n])
159+
} else {
160+
return ss.input_bytes[ss.pos + n]
158161
}
159-
return 0
160162
}
161163

162164
// back goes back one character from the current scanner position.

0 commit comments

Comments
 (0)