Skip to content

Commit b08746b

Browse files
authored
bpo-35062: Fix parsing _io.IncrementalNewlineDecoder's *translate* argument. (GH-10217)
_io.IncrementalNewlineDecoder's initializer possibly assigns out-of-range value to the bitwise struct field.
1 parent 511747b commit b08746b

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

‎Lib/test/test_io.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3748,6 +3748,16 @@ def _check(dec):
37483748
dec = self.IncrementalNewlineDecoder(None, translate=True)
37493749
_check(dec)
37503750

3751+
def test_translate(self):
3752+
# issue 35062
3753+
for translate in (-2, -1, 1, 2):
3754+
decoder = codecs.getincrementaldecoder("utf-8")()
3755+
decoder = self.IncrementalNewlineDecoder(decoder, translate)
3756+
self.check_newline_decoding_utf8(decoder)
3757+
decoder = codecs.getincrementaldecoder("utf-8")()
3758+
decoder = self.IncrementalNewlineDecoder(decoder, translate=0)
3759+
self.assertEqual(decoder.decode(b"\r\r\n"), "\r\r\n")
3760+
37513761
class CIncrementalNewlineDecoderTest(IncrementalNewlineDecoderTest):
37523762
pass
37533763

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix incorrect parsing of :class:`_io.IncrementalNewlineDecoder`'s
2+
*translate* argument.

‎Modules/_io/textio.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ _io_IncrementalNewlineDecoder___init___impl(nldecoder_object *self,
261261
}
262262
Py_INCREF(self->errors);
263263

264-
self->translate = translate;
264+
self->translate = translate ? 1 : 0;
265265
self->seennl = 0;
266266
self->pendingcr = 0;
267267

0 commit comments

Comments
 (0)