feat: error out if an empty string is in the extras array

This prevents never-ending loops in the parser
This commit is contained in:
Amin Yahyaabadi 2021-05-15 17:06:32 -05:00 committed by Amaan Qureshi
parent da0596ba38
commit 51c147053e
No known key found for this signature in database
GPG key ID: E67890ADC4227273

View file

@ -120,7 +120,22 @@ pub(crate) fn parse_grammar(input: &str) -> Result<InputGrammar> {
precedence_orderings.push(ordering);
}
let extra_symbols = grammar_json.extras.into_iter().map(parse_rule).collect();
let extra_symbols = grammar_json
.extras
.into_iter()
.try_fold(Vec::new(), |mut acc, item| {
let rule = parse_rule(item);
if let Rule::String(ref value) = rule {
if value.is_empty() {
return Err(anyhow!(
"Rules in the `extras` array must not contain empty strings"
));
}
}
acc.push(rule);
Ok(acc)
})?;
let external_tokens = grammar_json.externals.into_iter().map(parse_rule).collect();
Ok(InputGrammar {