Skip to content

Commit 79eaa09

Browse files
author
Gihwan Kim
committed
pythongh-101961 Do not pass encoding if binary mode
1 parent 739c026 commit 79eaa09

2 files changed

Lines changed: 30 additions & 12 deletions

File tree

‎Lib/fileinput.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ def hook_compressed(filename, mode, *, encoding=None, errors=None):
409409
import bz2
410410
stream = bz2.BZ2File(filename, mode)
411411
else:
412+
if "b" in mode:
413+
return open(filename, mode, errors=errors)
412414
return open(filename, mode, encoding=encoding, errors=errors)
413415

414416
# gzip and bz2 are binary mode by default.

‎Lib/test/test_fileinput.py‎

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -855,29 +855,29 @@ def setUp(self):
855855
self.fake_open = InvocationRecorder()
856856

857857
def test_empty_string(self):
858-
self.do_test_use_builtin_open("", 1)
858+
self.do_test_use_builtin_open_text("", "r")
859859

860860
def test_no_ext(self):
861-
self.do_test_use_builtin_open("abcd", 2)
861+
self.do_test_use_builtin_open_text("abcd", "r")
862862

863863
@unittest.skipUnless(gzip, "Requires gzip and zlib")
864864
def test_gz_ext_fake(self):
865865
original_open = gzip.open
866866
gzip.open = self.fake_open
867867
try:
868-
result = fileinput.hook_compressed("test.gz", "3")
868+
result = fileinput.hook_compressed("test.gz", "r")
869869
finally:
870870
gzip.open = original_open
871871

872872
self.assertEqual(self.fake_open.invocation_count, 1)
873-
self.assertEqual(self.fake_open.last_invocation, (("test.gz", "3"), {}))
873+
self.assertEqual(self.fake_open.last_invocation, (("test.gz", "r"), {}))
874874

875875
@unittest.skipUnless(gzip, "Requires gzip and zlib")
876876
def test_gz_with_encoding_fake(self):
877877
original_open = gzip.open
878878
gzip.open = lambda filename, mode: io.BytesIO(b'Ex-binary string')
879879
try:
880-
result = fileinput.hook_compressed("test.gz", "3", encoding="utf-8")
880+
result = fileinput.hook_compressed("test.gz", "r", encoding="utf-8")
881881
finally:
882882
gzip.open = original_open
883883
self.assertEqual(list(result), ['Ex-binary string'])
@@ -887,23 +887,40 @@ def test_bz2_ext_fake(self):
887887
original_open = bz2.BZ2File
888888
bz2.BZ2File = self.fake_open
889889
try:
890-
result = fileinput.hook_compressed("test.bz2", "4")
890+
result = fileinput.hook_compressed("test.bz2", "r")
891891
finally:
892892
bz2.BZ2File = original_open
893893

894894
self.assertEqual(self.fake_open.invocation_count, 1)
895-
self.assertEqual(self.fake_open.last_invocation, (("test.bz2", "4"), {}))
895+
self.assertEqual(self.fake_open.last_invocation, (("test.bz2", "r"), {}))
896896

897897
def test_blah_ext(self):
898-
self.do_test_use_builtin_open("abcd.blah", "5")
898+
self.do_test_use_builtin_open_binary("abcd.blah", "rb")
899899

900900
def test_gz_ext_builtin(self):
901-
self.do_test_use_builtin_open("abcd.Gz", "6")
901+
self.do_test_use_builtin_open_binary("abcd.Gz", "rb")
902902

903903
def test_bz2_ext_builtin(self):
904-
self.do_test_use_builtin_open("abcd.Bz2", "7")
904+
self.do_test_use_builtin_open_binary("abcd.Bz2", "rb")
905905

906-
def do_test_use_builtin_open(self, filename, mode):
906+
def test_binary_mode_encoding(self):
907+
self.do_test_use_builtin_open_binary("abcd", "rb")
908+
909+
def test_text_mode_encoding(self):
910+
self.do_test_use_builtin_open_text("abcd", "r")
911+
912+
def do_test_use_builtin_open_binary(self, filename, mode):
913+
original_open = self.replace_builtin_open(self.fake_open)
914+
try:
915+
result = fileinput.hook_compressed(filename, mode)
916+
finally:
917+
self.replace_builtin_open(original_open)
918+
919+
self.assertEqual(self.fake_open.invocation_count, 1)
920+
self.assertEqual(self.fake_open.last_invocation,
921+
((filename, mode), {'errors': None}))
922+
923+
def do_test_use_builtin_open_text(self, filename, mode):
907924
original_open = self.replace_builtin_open(self.fake_open)
908925
try:
909926
result = fileinput.hook_compressed(filename, mode)
@@ -980,7 +997,6 @@ def check(mode, expected_lines):
980997
with self.assertRaises(ValueError):
981998
check('rb', ['A\n', 'B\r\n', 'C\r', 'D\u20ac'])
982999

983-
9841000
class MiscTest(unittest.TestCase):
9851001

9861002
def test_all(self):

0 commit comments

Comments
 (0)