diff --git a/crates/nu-parser/src/parser.rs b/crates/nu-parser/src/parser.rs index f9f3862a5f..27ae3d5373 100644 --- a/crates/nu-parser/src/parser.rs +++ b/crates/nu-parser/src/parser.rs @@ -2744,6 +2744,13 @@ pub fn parse_string( let bytes = working_set.get_span_contents(span); + if bytes.is_empty() { + return ( + Expression::garbage(span), + Some(ParseError::Expected("String".into(), span)), + ); + } + // Check for bare word interpolation if bytes[0] != b'\'' && bytes[0] != b'"' && bytes[0] != b'`' && bytes.contains(&b'(') { return parse_string_interpolation(working_set, span, expand_aliases_denylist); diff --git a/src/tests/test_parser.rs b/src/tests/test_parser.rs index eff81e9600..0cc2f9a71c 100644 --- a/src/tests/test_parser.rs +++ b/src/tests/test_parser.rs @@ -477,3 +477,8 @@ fn or_and_xor() -> TestResult { fn unbalanced_delimiter() -> TestResult { fail_test(r#"{a:{b:5}}}"#, "unbalanced { and }") } + +#[test] +fn unbalanced_delimiter2() -> TestResult { + fail_test(r#"{}#.}"#, "unbalanced { and }") +}