diff options
author | Pavel Labath <labath@google.com> | 2015-03-02 12:46:22 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2015-03-02 12:46:22 +0000 |
commit | 00b7f95b122372d57b7d3f00ae435512024bb45e (patch) | |
tree | de21220b268ac58be38145b2e315040481b43080 /lldb/source/Interpreter/CommandInterpreter.cpp | |
parent | 2689d78909e115573d85075b5030b8acd1d14c75 (diff) | |
download | bcm5719-llvm-00b7f95b122372d57b7d3f00ae435512024bb45e.tar.gz bcm5719-llvm-00b7f95b122372d57b7d3f00ae435512024bb45e.zip |
Fix handling of backslashes in Args parsing
Summary:
Presently Args::SetCommandString allows quotes to be escaped with backslash. However, the
backslash itself is not removed from the argument, nor there is a way to escape the backslash
itself. This leads to surprising results:
"a b" c" -> 'a b', 'c' # Here we actually have an unterminated quote, but that is ignored
"a b\" c" -> 'a b\" c' # We try to escape the quote. That works but the backslash is not removed.
"a b\\" c" -> 'a b\\" c' # Escaping the backslash has no effect.
This change changes quote handling to be more shell-like:
- single quotes and backquotes are literal and there is no way to escape the closing quote or
anything else inside;
- inside double quotes you can use backslash to escape the closing quote and another backslash
- outside any quotes, you can use backslash to escape quotes, spaces and itself.
This makes the parsing more consistent with what the user is familiar and increases the
probability that pasting the command line from shell to the "process launch" command "just work".
Reviewers: clayborg
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D7855
llvm-svn: 230955
Diffstat (limited to 'lldb/source/Interpreter/CommandInterpreter.cpp')
-rw-r--r-- | lldb/source/Interpreter/CommandInterpreter.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp index 5075b9835e9..dd82da5bb65 100644 --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -1412,7 +1412,7 @@ CommandInterpreter::BuildAliasResult (const char *alias_name, CommandReturnObject &result) { CommandObject *alias_cmd_obj = nullptr; - Args cmd_args (raw_input_string.c_str()); + Args cmd_args (raw_input_string); alias_cmd_obj = GetCommandObject (alias_name); StreamString result_str; @@ -2082,8 +2082,8 @@ CommandInterpreter::HandleCompletion (const char *current_line, // We parse the argument up to the cursor, so the last argument in parsed_line is // the one containing the cursor, and the cursor is after the last character. - Args parsed_line(current_line, last_char - current_line); - Args partial_parsed_line(current_line, cursor - current_line); + Args parsed_line(llvm::StringRef(current_line, last_char - current_line)); + Args partial_parsed_line(llvm::StringRef(current_line, cursor - current_line)); // Don't complete comments, and if the line we are completing is just the history repeat character, // substitute the appropriate history line. |