Number value literal lookahead restrictions - [GraphQL - October 2021] #685
This commit is contained in:
parent
9ce89683d3
commit
c77de81194
|
@ -116,7 +116,7 @@ value = { variable | number | string | boolean | null | enum_value |
|
|||
|
||||
variable = { "$" ~ name }
|
||||
|
||||
number = @{ float | int }
|
||||
number = @{ (float | int) ~ !name_start }
|
||||
float = { int ~ ((fractional ~ exponent) | fractional | exponent) }
|
||||
fractional = { "." ~ ASCII_DIGIT+ }
|
||||
exponent = { ("E" | "e") ~ ("+" | "-")? ~ ASCII_DIGIT+ }
|
||||
|
@ -165,4 +165,5 @@ arguments = { "(" ~ argument+ ~ ")" }
|
|||
const_argument = { name ~ ":" ~ const_value }
|
||||
argument = { name ~ ":" ~ value }
|
||||
|
||||
name = @{ (ASCII_ALPHA | "_") ~ (ASCII_ALPHA | ASCII_DIGIT | "_")* }
|
||||
name_start = @{ (ASCII_ALPHA | "_") }
|
||||
name = @{ name_start ~ (ASCII_ALPHA | ASCII_DIGIT | "_")* }
|
||||
|
|
|
@ -312,3 +312,21 @@ fn parse_name(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Positione
|
|||
debug_assert_eq!(pair.as_rule(), Rule::name);
|
||||
Ok(Positioned::new(Name::new(pair.as_str()), pc.step(&pair)))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_number_lookahead_restrictions() {
|
||||
GraphQLParser::parse(Rule::const_list, "[123 abc]").unwrap();
|
||||
GraphQLParser::parse(Rule::const_list, "[123.0123 abc]").unwrap();
|
||||
GraphQLParser::parse(Rule::const_list, "[123.0123e7 abc]").unwrap();
|
||||
GraphQLParser::parse(Rule::const_list, "[123.0123e77 abc]").unwrap();
|
||||
|
||||
assert!(GraphQLParser::parse(Rule::const_list, "[123abc]").is_err());
|
||||
assert!(GraphQLParser::parse(Rule::const_list, "[123.0123abc]").is_err());
|
||||
assert!(GraphQLParser::parse(Rule::const_list, "[123.0123e7abc]").is_err());
|
||||
assert!(GraphQLParser::parse(Rule::const_list, "[123.0123e77abc]").is_err());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user