diff options
author | hut <hut@lavabit.com> | 2012-01-11 11:03:27 +0100 |
---|---|---|
committer | hut <hut@lavabit.com> | 2012-01-11 16:57:46 +0100 |
commit | 999a9268aa3d8104d864131d7ad4ee6d6b2a643b (patch) | |
tree | 3dc1aebc8d06fcf55c1c9f37f66094a175b07a06 /ranger | |
parent | 8c917a95c27e5293f762b018edc0751e95cf9726 (diff) | |
download | ranger-999a9268aa3d8104d864131d7ad4ee6d6b2a643b.tar.gz |
ext.shell_escape: Fixed escaping of tabs and unprintables
Diffstat (limited to 'ranger')
-rw-r--r-- | ranger/ext/shell_escape.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/ranger/ext/shell_escape.py b/ranger/ext/shell_escape.py index 28a502bf..b68afc33 100644 --- a/ranger/ext/shell_escape.py +++ b/ranger/ext/shell_escape.py @@ -18,17 +18,20 @@ Functions to escape metacharacters of arguments for shell commands. """ META_CHARS = (' ', "'", '"', '`', '&', '|', ';', - '$', '!', '(', ')', '[', ']', '<', '>') + '$', '!', '(', ')', '[', ']', '<', '>', '\t') +UNESCAPABLE = set(map(chr, list(range(9)) + list(range(10, 32)) \ + + list(range(127, 256)))) META_DICT = dict([(mc, '\\' + mc) for mc in META_CHARS]) def shell_quote(string): """Escapes by quoting""" return "'" + str(string).replace("'", "'\\''") + "'" - def shell_escape(arg): """Escapes by adding backslashes""" arg = str(arg) + if UNESCAPABLE & set(arg): + return shell_quote(arg) arg = arg.replace('\\', '\\\\') # make sure this comes at the start for k, v in META_DICT.items(): arg = arg.replace(k, v) |