From 99d264afbe7a9cd62e6c400ffd4bc7b4b3570650 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Thu, 16 Feb 2023 21:37:45 +0330 Subject: [PATCH] Shell: Correct the out-of-bounds expansion bailing condition Also adds a couple (useful) debug prints which helped track down the problem. --- Userland/Shell/PosixParser.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Userland/Shell/PosixParser.cpp b/Userland/Shell/PosixParser.cpp index 65570cb5b8..427971c74e 100644 --- a/Userland/Shell/PosixParser.cpp +++ b/Userland/Shell/PosixParser.cpp @@ -1682,10 +1682,13 @@ RefPtr Parser::parse_word() append_bareword(string.substring_view(*run_start, string.length() - *run_start)); }; + if (!token.resolved_expansions.is_empty()) + dbgln_if(SHELL_POSIX_PARSER_DEBUG, "Expanding '{}' with {} expansion entries", token.value, token.resolved_expansions.size()); size_t current_offset = 0; for (auto& expansion : token.resolved_expansions) { expansion.visit( [&](ResolvedParameterExpansion const& x) { + dbgln_if(SHELL_POSIX_PARSER_DEBUG, " Expanding '{}' ({}+{})", x.to_deprecated_string(), x.range.start, x.range.length); if (x.range.start >= token.value.length()) { dbgln("Parameter expansion range {}-{} is out of bounds for '{}'", x.range.start, x.range.length, token.value); return; @@ -1713,7 +1716,7 @@ RefPtr Parser::parse_word() }); } - if (current_offset >= token.value.length()) { + if (current_offset > token.value.length()) { dbgln("Parameter expansion range {}- is out of bounds for '{}'", current_offset, token.value); return word; }