summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2023-02-16 21:37:45 +0330
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2023-02-18 06:55:46 +0330
commit99d264afbe7a9cd62e6c400ffd4bc7b4b3570650 (patch)
tree242fddad514979727d6b1cba9dcd4f113e926b39
parentd56fbaa7e89b011e54428c17d5d313c47d648f80 (diff)
downloadserenity-99d264afbe7a9cd62e6c400ffd4bc7b4b3570650.zip
Shell: Correct the out-of-bounds expansion bailing condition
Also adds a couple (useful) debug prints which helped track down the problem.
-rw-r--r--Userland/Shell/PosixParser.cpp5
1 files changed, 4 insertions, 1 deletions
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<AST::Node> 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<AST::Node> 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;
}