Skip to content

Commit a8b0417

Browse files
committed
language/parser: Fix infinite loop on unexpected character
Ensure errors returned by the lexer are returned by any(). Hang found by go-fuzz. Signed-off-by: Jonathan Rudenberg <[email protected]>
1 parent 491504a commit a8b0417

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

language/parser/parser.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1429,7 +1429,7 @@ func any(parser *Parser, openKind int, parseFn parseFn, closeKind int) ([]interf
14291429
var nodes []interface{}
14301430
_, err := expect(parser, openKind)
14311431
if err != nil {
1432-
return nodes, nil
1432+
return nodes, err
14331433
}
14341434
for {
14351435
if skp, err := skip(parser, closeKind); err != nil {

language/parser/parser_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,16 @@ func TestParseCreatesAst(t *testing.T) {
576576

577577
}
578578

579+
func TestParseUnexpectedCharacter(t *testing.T) {
580+
_, err := Parse(ParseParams{Source: "{t(d:[[~"})
581+
expectedError := &gqlerrors.Error{
582+
Message: "Syntax Error GraphQL (1:8) Unexpected character \"~\".\n\n1: {t(d:[[~\n ^\n",
583+
Positions: []int{7},
584+
Locations: []location.SourceLocation{{1, 8}},
585+
}
586+
checkError(t, err, expectedError)
587+
}
588+
579589
type errorMessageTest struct {
580590
source interface{}
581591
expectedMessage string

0 commit comments

Comments
 (0)