diff --git a/jlexer/lexer.go b/jlexer/lexer.go index 36cd820..c3d4ed2 100644 --- a/jlexer/lexer.go +++ b/jlexer/lexer.go @@ -506,7 +506,7 @@ func (r *Lexer) SkipRecursive() { return } case c == '\\' && inQuotes: - wasEscape = true + wasEscape = !wasEscape continue case c == '"' && inQuotes: inQuotes = wasEscape @@ -516,8 +516,11 @@ func (r *Lexer) SkipRecursive() { wasEscape = false } r.pos = len(r.Data) - r.err = io.EOF -} + r.err = &LexerError{ + Reason: "EOF reached while skipping array/object or token", + Offset: r.pos, + Data: string(r.Data[r.pos:]), + }} // Raw fetches the next item recursively as a data slice func (r *Lexer) Raw() []byte { diff --git a/jlexer/lexer_test.go b/jlexer/lexer_test.go index b8e70f0..58f5fe9 100644 --- a/jlexer/lexer_test.go +++ b/jlexer/lexer_test.go @@ -157,6 +157,9 @@ func TestSkipRecursive(t *testing.T) { {toParse: `{"a\"}":1}, 4`, left: ", 4"}, {toParse: `{"a{":1}, 4`, left: ", 4"}, {toParse: `{"a\"{":1}, 4`, left: ", 4"}, + + // object with double slashes at the end of string + {toParse: `{"a":"hey\\"}, 4`, left: ", 4"}, } { l := Lexer{Data: []byte(test.toParse)}