Add non-interactive options for paste sanitization
This commit is contained in:
parent
169315d33d
commit
995112d952
3 changed files with 10 additions and 2 deletions
|
|
@ -552,6 +552,10 @@
|
|||
:code:`quote-urls-at-prompt`:
|
||||
If the text being pasted is a URL and the cursor is at a shell prompt,
|
||||
automatically quote the URL (needs :opt:`shell_integration`).
|
||||
:code:`replace-dangerous-control-codes`
|
||||
Replace dangerous control codes from pasted text, without confirmation.
|
||||
:code:`replace-newline`
|
||||
Replace the newline character from pasted text, without confirmation.
|
||||
:code:`confirm`:
|
||||
Confirm the paste if the text to be pasted contains any terminal control codes
|
||||
as this can be dangerous, leading to code execution if the shell/program running
|
||||
|
|
|
|||
|
|
@ -911,11 +911,11 @@ def shell_integration(x: str) -> FrozenSet[str]:
|
|||
|
||||
|
||||
def paste_actions(x: str) -> FrozenSet[str]:
|
||||
s = frozenset({'quote-urls-at-prompt', 'confirm', 'filter', 'confirm-if-large'})
|
||||
s = frozenset({'quote-urls-at-prompt', 'confirm', 'filter', 'confirm-if-large', 'replace-dangerous-control-codes', 'replace-newline'})
|
||||
q = frozenset(x.lower().split(','))
|
||||
if not q.issubset(s):
|
||||
log_error(f'Invalid paste actions: {q - s}, ignoring')
|
||||
return q & s or frozenset({'invalid'})
|
||||
return (q & s) or frozenset({'invalid'})
|
||||
return q
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1509,6 +1509,10 @@ def paste_with_actions(self, text: str) -> None:
|
|||
if rest.startswith('//') or scheme in ('mailto', 'irc'):
|
||||
import shlex
|
||||
text = shlex.quote(text)
|
||||
if 'replace-dangerous-control-codes' in opts.paste_actions:
|
||||
text = replace_control_codes(text)
|
||||
if 'replace-newline' in opts.paste_actions:
|
||||
text = text.replace('\n', '\x1bE')
|
||||
btext = text.encode('utf-8')
|
||||
if 'confirm' in opts.paste_actions:
|
||||
sanitized = replace_control_codes(text)
|
||||
|
|
|
|||
Loading…
Reference in a new issue