Skip to content

Commit 6439370

Browse files
joy4egbzick
authored andcommitted
fix crash in GoNext/GoPrev seq
1 parent b202a03 commit 6439370

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

stream.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,20 +174,20 @@ func (s *Stream) IsNextSequence(keys ...TokenKey) bool {
174174
var (
175175
result = true
176176
hSize = 0
177-
id = s.CurrentToken().ID()
178177
)
179178
if s.historySize > 0 && s.historySize < len(keys) {
180179
hSize = s.historySize
181180
s.historySize = len(keys)
182181
}
183182

183+
start := s.current
184184
for _, key := range keys {
185185
if !s.GoNext().CurrentToken().Is(key) {
186186
result = false
187187
break
188188
}
189189
}
190-
s.GoTo(id)
190+
s.current = start
191191

192192
if hSize != 0 {
193193
s.SetHistorySize(hSize)
@@ -200,13 +200,13 @@ func (s *Stream) IsAnyNextSequence(keys ...[]TokenKey) bool {
200200
var (
201201
result = true
202202
hSize = 0
203-
id = s.CurrentToken().ID()
204203
)
205204
if s.historySize > 0 && s.historySize < len(keys) {
206205
hSize = s.historySize
207206
s.historySize = len(keys)
208207
}
209208

209+
start := s.current
210210
for _, key := range keys {
211211
found := false
212212
for _, k := range key {
@@ -220,7 +220,7 @@ func (s *Stream) IsAnyNextSequence(keys ...[]TokenKey) bool {
220220
break
221221
}
222222
}
223-
s.GoTo(id)
223+
s.current = start
224224

225225
if hSize != 0 {
226226
s.SetHistorySize(hSize)

stream_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package tokenizer
33
import (
44
"bytes"
55
"fmt"
6-
"github.com/stretchr/testify/require"
76
"testing"
87
"time"
8+
9+
"github.com/stretchr/testify/require"
910
)
1011

1112
func TestStream(t *testing.T) {
@@ -272,6 +273,17 @@ func TestIssue9(t *testing.T) {
272273
}
273274
}
274275

276+
func TestStreamOverflow(t *testing.T) {
277+
parser := New()
278+
buf := bytes.NewBuffer([]byte("a b c"))
279+
280+
stream := parser.ParseStream(buf, 4096)
281+
defer stream.Close()
282+
283+
require.False(t, stream.IsNextSequence(TokenKeyword, TokenKeyword, TokenKeyword, TokenKeyword))
284+
require.False(t, stream.IsNextSequence(TokenKeyword, TokenKeyword, TokenKeyword, TokenKeyword))
285+
}
286+
275287
func TestIssue7(t *testing.T) {
276288
p := New()
277289
buf := bytes.NewBuffer(nil)

0 commit comments

Comments
 (0)