mirror of
https://github.com/python/cpython.git
synced 2025-11-24 12:20:42 +00:00
[3.14] gh-138514: getpass: restrict echo_char to a single ASCII character (GH-138591) (#138988)
Co-authored-by: Benjamin Johnson <benjohnson2040@gmail.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Brian Schubert <brianm.schubert@gmail.com>
This commit is contained in:
parent
ce48f4c845
commit
37f8a63e39
5 changed files with 57 additions and 9 deletions
|
|
@ -33,8 +33,8 @@ def unix_getpass(prompt='Password: ', stream=None, *, echo_char=None):
|
|||
prompt: Written on stream to ask for the input. Default: 'Password: '
|
||||
stream: A writable file object to display the prompt. Defaults to
|
||||
the tty. If no tty is available defaults to sys.stderr.
|
||||
echo_char: A string used to mask input (e.g., '*'). If None, input is
|
||||
hidden.
|
||||
echo_char: A single ASCII character to mask input (e.g., '*').
|
||||
If None, input is hidden.
|
||||
Returns:
|
||||
The seKr3t input.
|
||||
Raises:
|
||||
|
|
@ -144,10 +144,19 @@ def fallback_getpass(prompt='Password: ', stream=None, *, echo_char=None):
|
|||
|
||||
|
||||
def _check_echo_char(echo_char):
|
||||
# ASCII excluding control characters
|
||||
if echo_char and not (echo_char.isprintable() and echo_char.isascii()):
|
||||
raise ValueError("'echo_char' must be a printable ASCII string, "
|
||||
f"got: {echo_char!r}")
|
||||
# Single-character ASCII excluding control characters
|
||||
if echo_char is None:
|
||||
return
|
||||
if not isinstance(echo_char, str):
|
||||
raise TypeError("'echo_char' must be a str or None, not "
|
||||
f"{type(echo_char).__name__}")
|
||||
if not (
|
||||
len(echo_char) == 1
|
||||
and echo_char.isprintable()
|
||||
and echo_char.isascii()
|
||||
):
|
||||
raise ValueError("'echo_char' must be a single printable ASCII "
|
||||
f"character, got: {echo_char!r}")
|
||||
|
||||
|
||||
def _raw_input(prompt="", stream=None, input=None, echo_char=None):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue