Skip to content

Commit 05acd44

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 bc6f74a commit 05acd44

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
@@ -2922,6 +2922,16 @@ def _check(dec):
29222922
dec = self.IncrementalNewlineDecoder(None, translate=True)
29232923
_check(dec)
29242924

2925+
def test_translate(self):
2926+
# issue 35062
2927+
for translate in (-2, -1, 1, 2):
2928+
decoder = codecs.getincrementaldecoder("utf-8")()
2929+
decoder = self.IncrementalNewlineDecoder(decoder, translate)
2930+
self.check_newline_decoding_utf8(decoder)
2931+
decoder = codecs.getincrementaldecoder("utf-8")()
2932+
decoder = self.IncrementalNewlineDecoder(decoder, translate=0)
2933+
self.assertEqual(decoder.decode(b"\r\r\n"), "\r\r\n")
2934+
29252935
class CIncrementalNewlineDecoderTest(IncrementalNewlineDecoderTest):
29262936
pass
29272937

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
@@ -221,7 +221,7 @@ incrementalnewlinedecoder_init(nldecoder_object *self,
221221
self->errors = errors;
222222
}
223223

224-
self->translate = translate;
224+
self->translate = translate ? 1 : 0;
225225
self->seennl = 0;
226226
self->pendingcr = 0;
227227

0 commit comments

Comments
 (0)