Mierge #21169: fix getpass to use replace error handler on UnicodeEncodeError.
This commit is contained in:
commit
e084e97f9f
|
@ -135,7 +135,12 @@ def _raw_input(prompt="", stream=None, input=None):
|
||||||
input = sys.stdin
|
input = sys.stdin
|
||||||
prompt = str(prompt)
|
prompt = str(prompt)
|
||||||
if prompt:
|
if prompt:
|
||||||
stream.write(prompt)
|
try:
|
||||||
|
stream.write(prompt)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
prompt = prompt.encode(stream.encoding, 'replace')
|
||||||
|
prompt = prompt.decode(stream.encoding)
|
||||||
|
stream.write(prompt)
|
||||||
stream.flush()
|
stream.flush()
|
||||||
# NOTE: The Python C API calls flockfile() (and unlock) during readline.
|
# NOTE: The Python C API calls flockfile() (and unlock) during readline.
|
||||||
line = input.readline()
|
line = input.readline()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import getpass
|
import getpass
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from io import BytesIO, StringIO
|
from io import BytesIO, StringIO, TextIOWrapper
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
from test import support
|
from test import support
|
||||||
|
|
||||||
|
@ -69,6 +69,14 @@ class GetpassRawinputTest(unittest.TestCase):
|
||||||
getpass._raw_input(stream=StringIO())
|
getpass._raw_input(stream=StringIO())
|
||||||
mock_input.readline.assert_called_once_with()
|
mock_input.readline.assert_called_once_with()
|
||||||
|
|
||||||
|
@mock.patch('sys.stdin')
|
||||||
|
def test_uses_stdin_as_different_locale(self, mock_input):
|
||||||
|
stream = TextIOWrapper(BytesIO(), encoding="ascii")
|
||||||
|
mock_input.readline.return_value = "Hasło: "
|
||||||
|
getpass._raw_input(prompt="Hasło: ",stream=stream)
|
||||||
|
mock_input.readline.assert_called_once_with()
|
||||||
|
|
||||||
|
|
||||||
def test_raises_on_empty_input(self):
|
def test_raises_on_empty_input(self):
|
||||||
input = StringIO('')
|
input = StringIO('')
|
||||||
self.assertRaises(EOFError, getpass._raw_input, input=input)
|
self.assertRaises(EOFError, getpass._raw_input, input=input)
|
||||||
|
|
|
@ -34,6 +34,10 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #21169: getpass now handles non-ascii characters that the
|
||||||
|
input stream encoding cannot encode by re-encoding using the
|
||||||
|
replace error handler.
|
||||||
|
|
||||||
- Issue #21171: Fixed undocumented filter API of the rot13 codec.
|
- Issue #21171: Fixed undocumented filter API of the rot13 codec.
|
||||||
Patch by Berker Peksag.
|
Patch by Berker Peksag.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue