Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion lib/graphql/language/lexer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,10 @@ def advance
# Check for a matched decimal:
@scanner[1] ? :FLOAT : :INT
else
raise_parse_error("Expected a number, but it was malformed (#{@string[@pos].inspect})")
# Attempt to find the part after the `-`
value = @scanner.scan(/-\s?[a-z0-9]*/i)
invalid_byte_for_number_error_message = "Expected type 'number', but it was malformed#{value.nil? ? "" : ": #{value.inspect}"}."
raise_parse_error(invalid_byte_for_number_error_message)
end
when ByteFor::ELLIPSIS
if @string.getbyte(@pos + 1) != 46 || @string.getbyte(@pos + 2) != 46
Expand Down
59 changes: 57 additions & 2 deletions spec/graphql/language/parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,62 @@
expected_message = if USING_C_PARSER
"syntax error, unexpected invalid token (\"-\") at [1, 8]"
else
"Expected a number, but it was malformed (\"-\")"
"Expected type 'number', but it was malformed: \"-c\"."
end
assert_equal expected_message, err.message
end

it "handles invalid minus signs in variable default values" do
err = assert_raises GraphQL::ParseError do
GraphQL.parse("query($something: Int = -foo) { }")
end
expected_message = if USING_C_PARSER
"syntax error, unexpected invalid token (\"-\") at [1, 25]"
else
"Expected type 'number', but it was malformed: \"-foo\"."
end
assert_equal expected_message, err.message
end

it "handles invalid minus signs in deeply nested input objects" do
err = assert_raises GraphQL::ParseError do
GraphQL.parse("{ doSomething(a: { b: { c: { d: -foo } } }) }")
end
expected_message = if USING_C_PARSER
"syntax error, unexpected invalid token (\"-\") at [1, 33]"
else
"Expected type 'number', but it was malformed: \"-foo\"."
end
assert_equal expected_message, err.message
end

it "handles invalid minus signs in schema definitions" do
err = assert_raises GraphQL::ParseError do
GraphQL.parse("
type Query {
someField(a: Int = -foo): Int
}
")
end
expected_message = if USING_C_PARSER
"syntax error, unexpected invalid token (\"-\") at [3, 28]"
else
"Expected type 'number', but it was malformed: \"-foo\"."
end
assert_equal expected_message, err.message
end

it "handles invalid minus signs in list literals" do
err = assert_raises GraphQL::ParseError do
GraphQL.parse("{
a1: a(b: [1,2,3])
a2: a(b: [1, 2, -foo])
}")
end
expected_message = if USING_C_PARSER
"syntax error, unexpected invalid token (\"-\") at [3, 25]"
else
"Expected type 'number', but it was malformed: \"-foo\"."
end
assert_equal expected_message, err.message
end
Expand Down Expand Up @@ -192,7 +247,7 @@
expected_msg = if USING_C_PARSER
"syntax error, unexpected invalid token (\"-\") at [1, 19]"
else
"Expected a number, but it was malformed (\"-\")"
"Expected type 'number', but it was malformed: \"-b\"."
end

assert_equal expected_msg, err.message
Expand Down
Loading