diff options
author | Xiang Zhang <angwerzx@126.com> | 2018-10-31 11:49:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-31 11:49:16 (GMT) |
commit | b08746bfdf64e55ce33516f2065fa2aa4f51be95 (patch) | |
tree | 2db76a41e51aea8b2af9f3ee05b0a94cf16e046d | |
parent | 511747bec3aca4ad7930005e3adece9196c1cd39 (diff) | |
download | cpython-b08746bfdf64e55ce33516f2065fa2aa4f51be95.zip cpython-b08746bfdf64e55ce33516f2065fa2aa4f51be95.tar.gz cpython-b08746bfdf64e55ce33516f2065fa2aa4f51be95.tar.bz2 |
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.
-rw-r--r-- | Lib/test/test_io.py | 10 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-10-29-23-09-24.bpo-35062.dQS1ng.rst | 2 | ||||
-rw-r--r-- | Modules/_io/textio.c | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index abd5538..d927bb9 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -3748,6 +3748,16 @@ class IncrementalNewlineDecoderTest(unittest.TestCase): dec = self.IncrementalNewlineDecoder(None, translate=True) _check(dec) + def test_translate(self): + # issue 35062 + for translate in (-2, -1, 1, 2): + decoder = codecs.getincrementaldecoder("utf-8")() + decoder = self.IncrementalNewlineDecoder(decoder, translate) + self.check_newline_decoding_utf8(decoder) + decoder = codecs.getincrementaldecoder("utf-8")() + decoder = self.IncrementalNewlineDecoder(decoder, translate=0) + self.assertEqual(decoder.decode(b"\r\r\n"), "\r\r\n") + class CIncrementalNewlineDecoderTest(IncrementalNewlineDecoderTest): pass diff --git a/Misc/NEWS.d/next/Library/2018-10-29-23-09-24.bpo-35062.dQS1ng.rst b/Misc/NEWS.d/next/Library/2018-10-29-23-09-24.bpo-35062.dQS1ng.rst new file mode 100644 index 0000000..b77ed86 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-10-29-23-09-24.bpo-35062.dQS1ng.rst @@ -0,0 +1,2 @@ +Fix incorrect parsing of :class:`_io.IncrementalNewlineDecoder`'s +*translate* argument. diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 3a3667b..be42777 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -261,7 +261,7 @@ _io_IncrementalNewlineDecoder___init___impl(nldecoder_object *self, } Py_INCREF(self->errors); - self->translate = translate; + self->translate = translate ? 1 : 0; self->seennl = 0; self->pendingcr = 0; |