From d7ce8e96bf64c7e25877ffd00c737c295a40b5bd Mon Sep 17 00:00:00 2001 From: Dmitry Dodzin Date: Sun, 15 Jun 2025 22:56:30 +0300 Subject: [PATCH] Null could break the parsing logic because it was only peeked not consumed --- src/lib.rs | 1 + src/transform/value.rs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 502f439..adc34fa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -451,6 +451,7 @@ mod tests { #[case("\"foobar\"", Value::String("foobar".into()))] #[case("\"\\\\foobar\"", Value::String("\\foobar".into()))] #[case("\"\\u2705\"", Value::String("✅".into()))] + #[case("[null, 2, 3]", "[null, 2, 3]")] fn parse_literals(#[case] query: &str, #[case] expected: Value) -> Result<()> { let jslt: Jslt = query.parse()?; diff --git a/src/transform/value.rs b/src/transform/value.rs index 5d797a9..ca28d30 100644 --- a/src/transform/value.rs +++ b/src/transform/value.rs @@ -199,12 +199,15 @@ impl FromPairs for ValueTransformer { Rule::Accessor => AccessorTransformer::from_pairs(pairs).map(ValueTransformer::Accessor), Rule::Array => ArrayTransformer::from_pairs(pairs).map(ValueTransformer::Array), Rule::Boolean => BooleanTransformer::from_pairs(pairs).map(ValueTransformer::Boolean), - Rule::Null => Ok(ValueTransformer::Null(NullTransformer)), Rule::Number => NumberTransformer::from_pairs(pairs).map(ValueTransformer::Number), Rule::Object => ObjectTransformer::from_pairs(pairs).map(ValueTransformer::Object), Rule::Scope => ScopeTransformer::from_pairs(pairs).map(ValueTransformer::Scope), Rule::String => StringTransformer::from_pairs(pairs).map(ValueTransformer::String), Rule::Variable => VariableTransformer::from_pairs(pairs).map(ValueTransformer::Variable), + Rule::Null => { + let _ = pairs.next(); + Ok(ValueTransformer::Null(NullTransformer)) + } rule => Err(JsltError::UnexpectedInput( Rule::Value, rule,