summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXiang Zhang <angwerzx@126.com>2018-10-31 11:49:16 (GMT)
committerGitHub <noreply@github.com>2018-10-31 11:49:16 (GMT)
commitb08746bfdf64e55ce33516f2065fa2aa4f51be95 (patch)
tree2db76a41e51aea8b2af9f3ee05b0a94cf16e046d
parent511747bec3aca4ad7930005e3adece9196c1cd39 (diff)
downloadcpython-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.py10
-rw-r--r--Misc/NEWS.d/next/Library/2018-10-29-23-09-24.bpo-35062.dQS1ng.rst2
-rw-r--r--Modules/_io/textio.c2
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;