Browse Source

Shell: Correctly handle escaped quote characters in strings

Previously "foo\`bar" was treated literally, but \` is a valid escape
character.
This commit makes that string correctly evaluate as "foo`bar".
Ali Mohammad Pur 2 năm trước cách đây
mục cha
commit
aecd91aedc
1 tập tin đã thay đổi với 4 bổ sung0 xóa
  1. 4 0
      Userland/Shell/PosixParser.cpp

+ 4 - 0
Userland/Shell/PosixParser.cpp

@@ -1685,6 +1685,10 @@ ErrorOr<RefPtr<AST::Node>> Parser::parse_word()
             switch (ch) {
             switch (ch) {
             case '\\':
             case '\\':
                 if (!escape && i + 1 < string.length()) {
                 if (!escape && i + 1 < string.length()) {
+                    if (run_start.has_value())
+                        TRY(append_string_literal(string.substring_view(*run_start, i - *run_start)));
+                    run_start = i + 1;
+
                     if (is_one_of(string[i + 1], '"', '\'', '$', '`', '\\')) {
                     if (is_one_of(string[i + 1], '"', '\'', '$', '`', '\\')) {
                         escape = in_quote != Quote::Single;
                         escape = in_quote != Quote::Single;
                         continue;
                         continue;