Index: Modules/zlibmodule.c =================================================================== --- Modules/zlibmodule.c (révision 67926) +++ Modules/zlibmodule.c (copie de travail) @@ -124,7 +124,7 @@ z_stream zst; /* require Python string object, optional 'level' arg */ - if (!PyArg_ParseTuple(args, "s*|i:compress", &pinput, &level)) + if (!PyArg_ParseTuple(args, "y*|i:compress", &pinput, &level)) return NULL; input = pinput.buf; length = pinput.len; @@ -207,7 +207,7 @@ Py_ssize_t r_strlen=DEFAULTALLOC; z_stream zst; - if (!PyArg_ParseTuple(args, "s*|in:decompress", + if (!PyArg_ParseTuple(args, "y*|in:decompress", &pinput, &wsize, &r_strlen)) return NULL; input = pinput.buf; @@ -412,7 +412,7 @@ Byte *input; unsigned long start_total_out; - if (!PyArg_ParseTuple(args, "s*:compress", &pinput)) + if (!PyArg_ParseTuple(args, "y*:compress", &pinput)) return NULL; input = pinput.buf; inplen = pinput.len; @@ -494,7 +494,7 @@ Byte *input; unsigned long start_total_out; - if (!PyArg_ParseTuple(args, "s*|i:decompress", &pinput, + if (!PyArg_ParseTuple(args, "y*|i:decompress", &pinput, &max_length)) return NULL; input = pinput.buf; @@ -921,12 +921,13 @@ PyZlib_adler32(PyObject *self, PyObject *args) { unsigned int adler32val = 1; /* adler32(0L, Z_NULL, 0) */ - Byte *buf; + Py_buffer pbuf; int len; - if (!PyArg_ParseTuple(args, "s#|I:adler32", &buf, &len, &adler32val)) + if (!PyArg_ParseTuple(args, "y*|I:adler32", &pbuf, &adler32val)) return NULL; - adler32val = adler32(adler32val, buf, len); + adler32val = adler32(adler32val, pbuf.buf, pbuf.len); + PyBuffer_Release(&pbuf); return PyLong_FromUnsignedLong(adler32val & 0xffffffffU); } @@ -943,7 +944,7 @@ Py_buffer pbuf; int signed_val; - if (!PyArg_ParseTuple(args, "s*|I:crc32", &pbuf, &crc32val)) + if (!PyArg_ParseTuple(args, "y*|I:crc32", &pbuf, &crc32val)) return NULL; signed_val = crc32(crc32val, pbuf.buf, pbuf.len); PyBuffer_Release(&pbuf); Index: Lib/test/test_zlib.py =================================================================== --- Lib/test/test_zlib.py (révision 67926) +++ Lib/test/test_zlib.py (copie de travail) @@ -40,12 +40,12 @@ self.assertEqual(zlib.adler32(b"penguin"),zlib.adler32(b"penguin",1)) def test_crc32_adler32_unsigned(self): - foo = 'abcdefghijklmnop' + foo = b'abcdefghijklmnop' # explicitly test signed behavior self.assertEqual(zlib.crc32(foo), 2486878355) - self.assertEqual(zlib.crc32('spam'), 1138425661) + self.assertEqual(zlib.crc32(b'spam'), 1138425661) self.assertEqual(zlib.adler32(foo+foo), 3573550353) - self.assertEqual(zlib.adler32('spam'), 72286642) + self.assertEqual(zlib.adler32(b'spam'), 72286642) def test_same_as_binascii_crc32(self): foo = b'abcdefghijklmnop' @@ -62,7 +62,7 @@ # specifying compression level out of range causes an error # (but -1 is Z_DEFAULT_COMPRESSION and apparently the zlib # accepts 0 too) - self.assertRaises(zlib.error, zlib.compress, 'ERROR', 10) + self.assertRaises(zlib.error, zlib.compress, b'ERROR', 10) def test_badcompressobj(self): # verify failure on building compress object with bad params @@ -172,7 +172,7 @@ bufs.append(dco.flush()) else: while True: - chunk = dco.decompress('') + chunk = dco.decompress(b'') if chunk: bufs.append(chunk) else: @@ -240,7 +240,7 @@ bufs.append(dco.flush()) else: while chunk: - chunk = dco.decompress('', max_length) + chunk = dco.decompress(b'', max_length) self.failIf(len(chunk) > max_length, 'chunk too big (%d>%d)' % (len(chunk),max_length)) bufs.append(chunk) @@ -252,7 +252,7 @@ def test_maxlenmisc(self): # Misc tests of max_length dco = zlib.decompressobj() - self.assertRaises(ValueError, dco.decompress, "", -1) + self.assertRaises(ValueError, dco.decompress, b"", -1) self.assertEqual(b'', dco.unconsumed_tail) def test_flushes(self):