Skip to content

Commit 907b07e

Browse files
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. (cherry picked from commit b08746b) Co-authored-by: Xiang Zhang <[email protected]>
1 parent 00093f6 commit 907b07e

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
@@ -3547,6 +3547,16 @@ def _check(dec):
35473547
dec = self.IncrementalNewlineDecoder(None, translate=True)
35483548
_check(dec)
35493549

3550+
def test_translate(self):
3551+
# issue 35062
3552+
for translate in (-2, -1, 1, 2):
3553+
decoder = codecs.getincrementaldecoder("utf-8")()
3554+
decoder = self.IncrementalNewlineDecoder(decoder, translate)
3555+
self.check_newline_decoding_utf8(decoder)
3556+
decoder = codecs.getincrementaldecoder("utf-8")()
3557+
decoder = self.IncrementalNewlineDecoder(decoder, translate=0)
3558+
self.assertEqual(decoder.decode(b"\r\r\n"), "\r\r\n")
3559+
35503560
class CIncrementalNewlineDecoderTest(IncrementalNewlineDecoderTest):
35513561
pass
35523562

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
@@ -268,7 +268,7 @@ _io_IncrementalNewlineDecoder___init___impl(nldecoder_object *self,
268268
self->errors = errors;
269269
}
270270

271-
self->translate = translate;
271+
self->translate = translate ? 1 : 0;
272272
self->seennl = 0;
273273
self->pendingcr = 0;
274274

0 commit comments

Comments
 (0)