From c471c42c7c2b26b4330c7780abe72cc8176580ab Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 23 Feb 2018 13:04:31 +1300 Subject: Fix an issue with quoting and commands Previously, quotes would disappear during editing, making it impossible to enter command arguments with spaces. --- mitmproxy/tools/console/commander/commander.py | 22 +++++++++++++++++++--- test/mitmproxy/test_command.py | 16 ++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/mitmproxy/tools/console/commander/commander.py b/mitmproxy/tools/console/commander/commander.py index 566c42e6..f3e499f8 100644 --- a/mitmproxy/tools/console/commander/commander.py +++ b/mitmproxy/tools/console/commander/commander.py @@ -68,6 +68,21 @@ class CommandBuffer: else: self._cursor = x + def maybequote(self, value): + if " " in value and not value.startswith("\""): + return "\"%s\"" % value + return value + + def parse_quoted(self, txt): + parts, remhelp = self.master.commands.parse_partial(txt) + for i, p in enumerate(parts): + parts[i] = mitmproxy.command.ParseResult( + value = self.maybequote(p.value), + type = p.type, + valid = p.valid + ) + return parts, remhelp + def render(self): """ This function is somewhat tricky - in order to make the cursor @@ -75,7 +90,7 @@ class CommandBuffer: character-for-character offset match in the rendered output, up to the cursor. Beyond that, we can add stuff. """ - parts, remhelp = self.master.commands.parse_partial(self.text) + parts, remhelp = self.parse_quoted(self.text) ret = [] for p in parts: if p.valid: @@ -95,8 +110,9 @@ class CommandBuffer: return ret def flatten(self, txt): - parts, _ = self.master.commands.parse_partial(txt) - return " ".join([x.value for x in parts]) + parts, _ = self.parse_quoted(txt) + ret = [x.value for x in parts] + return " ".join(ret) def left(self) -> None: self.cursor = self.cursor - 1 diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index c777192d..e2b80753 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -211,6 +211,22 @@ class TestCommand: ], [] ], + [ + "flow \"one two", + [ + command.ParseResult(value = "flow", type = mitmproxy.types.Cmd, valid = True), + command.ParseResult(value = "\"one two", type = flow.Flow, valid = False), + ], + ["str"] + ], + [ + "flow \"one two\"", + [ + command.ParseResult(value = "flow", type = mitmproxy.types.Cmd, valid = True), + command.ParseResult(value = "one two", type = flow.Flow, valid = False), + ], + ["str"] + ], ] with taddons.context() as tctx: tctx.master.addons.add(TAddon()) -- cgit v1.2.3