From 0cc7ee5511d4b19773642401845bc1fbcc2584cd Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Thu, 16 Jan 2025 04:32:28 +0100 Subject: [PATCH] Fix regression causing crash on unconsumed } Fixes #11052 --- src/ast.rs | 1 + src/tests/tokenizer.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/ast.rs b/src/ast.rs index 8eb85e24d..93c8bba0e 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -3466,6 +3466,7 @@ fn consume_excess_token_generating_error(&mut self) { } ParseTokenType::pipe | ParseTokenType::redirection + | ParseTokenType::right_brace | ParseTokenType::background | ParseTokenType::andand | ParseTokenType::oror => { diff --git a/src/tests/tokenizer.rs b/src/tests/tokenizer.rs index d7d7209bf..b36b4bf1a 100644 --- a/src/tests/tokenizer.rs +++ b/src/tests/tokenizer.rs @@ -68,6 +68,19 @@ fn test_tokenizer() { assert_eq!(token.type_, TokenType::left_brace); } + { + let s = L!("{ | { name } '"); + let mut t = Tokenizer::new(s, TokFlags(0)); + let mut next_type = || t.next().unwrap().type_; + assert_eq!(next_type(), TokenType::left_brace); + assert_eq!(next_type(), TokenType::pipe); + assert_eq!(next_type(), TokenType::left_brace); + assert_eq!(next_type(), TokenType::string); + assert_eq!(next_type(), TokenType::right_brace); + assert_eq!(next_type(), TokenType::error); + assert!(t.next().is_none()); + } + let s = L!(concat!( "string &1 'nested \"quoted\" '(string containing subshells ", "){and,brackets}$as[$well (as variable arrays)] not_a_redirect^ ^ ^^is_a_redirect ",