mirror of
https://github.com/python/cpython.git
synced 2026-04-20 02:40:59 +00:00
gh-148169: Fix webbrowser %action substitution bypass of dash-prefix check (#148170)
This commit is contained in:
parent
8ecb6b8b0c
commit
d22922c8a7
3 changed files with 14 additions and 2 deletions
|
|
@ -119,6 +119,15 @@ def test_open_bad_new_parameter(self):
|
|||
arguments=[URL],
|
||||
kw=dict(new=999))
|
||||
|
||||
def test_reject_action_dash_prefixes(self):
|
||||
browser = self.browser_class(name=CMD_NAME)
|
||||
with self.assertRaises(ValueError):
|
||||
browser.open('%action--incognito')
|
||||
# new=1: action is "--new-window", so "%action" itself expands to
|
||||
# a dash-prefixed flag even with no dash in the original URL.
|
||||
with self.assertRaises(ValueError):
|
||||
browser.open('%action', new=1)
|
||||
|
||||
|
||||
class EdgeCommandTest(CommandTestMixin, unittest.TestCase):
|
||||
|
||||
|
|
|
|||
|
|
@ -274,7 +274,6 @@ def _invoke(self, args, remote, autoraise, url=None):
|
|||
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
sys.audit("webbrowser.open", url)
|
||||
self._check_url(url)
|
||||
if new == 0:
|
||||
action = self.remote_action
|
||||
elif new == 1:
|
||||
|
|
@ -288,7 +287,9 @@ def open(self, url, new=0, autoraise=True):
|
|||
raise Error("Bad 'new' parameter to open(); "
|
||||
f"expected 0, 1, or 2, got {new}")
|
||||
|
||||
args = [arg.replace("%s", url).replace("%action", action)
|
||||
self._check_url(url.replace("%action", action))
|
||||
|
||||
args = [arg.replace("%action", action).replace("%s", url)
|
||||
for arg in self.remote_args]
|
||||
args = [arg for arg in args if arg]
|
||||
success = self._invoke(args, True, autoraise, url)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
A bypass in :mod:`webbrowser` allowed URLs prefixed with ``%action`` to pass
|
||||
the dash-prefix safety check.
|
||||
Loading…
Add table
Add a link
Reference in a new issue