Index: Lib/test/test_zlib.py =================================================================== --- Lib/test/test_zlib.py (revision 66222) +++ Lib/test/test_zlib.py (working copy) @@ -152,7 +152,11 @@ bufs.append(co.flush()) combuf = b''.join(bufs) - self.assertEqual(data, zlib.decompress(combuf)) + decombuf = zlib.decompress(combuf) + # Test type of return value + self.assertEqual(type(decombuf), bytes) + + self.assertEqual(data, decombuf) dco = zlib.decompressobj() bufs = [] @@ -348,7 +352,9 @@ # Test copying a decompression object data = HAMLET_SCENE comp = zlib.compress(data) - + # Test type of return value + self.assertEqual(type(comp), bytes) + d0 = zlib.decompressobj() bufs0 = [] bufs0.append(d0.decompress(comp[:32])) Index: Modules/zipimport.c =================================================================== --- Modules/zipimport.c (revision 66222) +++ Modules/zipimport.c (working copy) @@ -467,7 +467,7 @@ toc_entry = PyDict_GetItemString(self->files, path); if (toc_entry != NULL) { PyObject *bytes = get_data(_PyUnicode_AsString(self->archive), toc_entry); - PyObject *res = PyUnicode_FromString(PyByteArray_AsString(bytes)); + PyObject *res = PyUnicode_FromString(PyBytes_AsString(bytes)); Py_XDECREF(bytes); return res; } @@ -836,13 +836,13 @@ bytes_size = compress == 0 ? data_size : data_size + 1; if (bytes_size == 0) bytes_size++; - raw_data = PyByteArray_FromStringAndSize((char *)NULL, bytes_size); + raw_data = PyBytes_FromStringAndSize((char *)NULL, bytes_size); if (raw_data == NULL) { fclose(fp); return NULL; } - buf = PyByteArray_AsString(raw_data); + buf = PyBytes_AsString(raw_data); err = fseek(fp, file_offset, 0); if (err == 0) @@ -862,7 +862,7 @@ buf[data_size] = '\0'; if (compress == 0) { /* data is not compressed */ - data = PyByteArray_FromStringAndSize(buf, data_size); + data = PyBytes_FromStringAndSize(buf, data_size); Py_DECREF(raw_data); return data; } @@ -903,8 +903,8 @@ unmarshal_code(char *pathname, PyObject *data, time_t mtime) { PyObject *code; - char *buf = PyByteArray_AsString(data); - Py_ssize_t size = PyByteArray_Size(data); + char *buf = PyBytes_AsString(data); + Py_ssize_t size = PyBytes_Size(data); if (size <= 9) { PyErr_SetString(ZipImportError, @@ -949,16 +949,16 @@ static PyObject * normalize_line_endings(PyObject *source) { - char *buf, *q, *p = PyByteArray_AsString(source); + char *buf, *q, *p = PyBytes_AsString(source); PyObject *fixed_source; int len = 0; if (!p) { - return PyByteArray_FromStringAndSize("\n\0", 2); + return PyBytes_FromStringAndSize("\n\0", 2); } /* one char extra for trailing \n and one for terminating \0 */ - buf = (char *)PyMem_Malloc(PyByteArray_Size(source) + 2); + buf = (char *)PyMem_Malloc(PyBytes_Size(source) + 2); if (buf == NULL) { PyErr_SetString(PyExc_MemoryError, "zipimport: no memory to allocate " @@ -978,7 +978,7 @@ } *q++ = '\n'; /* add trailing \n */ *q = '\0'; - fixed_source = PyByteArray_FromStringAndSize(buf, len + 2); + fixed_source = PyBytes_FromStringAndSize(buf, len + 2); PyMem_Free(buf); return fixed_source; } @@ -994,7 +994,7 @@ if (fixed_source == NULL) return NULL; - code = Py_CompileString(PyByteArray_AsString(fixed_source), pathname, + code = Py_CompileString(PyBytes_AsString(fixed_source), pathname, Py_file_input); Py_DECREF(fixed_source); return code; Index: Modules/zlibmodule.c =================================================================== --- Modules/zlibmodule.c (revision 66222) +++ Modules/zlibmodule.c (working copy) @@ -178,7 +178,7 @@ err=deflateEnd(&zst); if (err == Z_OK) - ReturnVal = PyByteArray_FromStringAndSize((char *)output, + ReturnVal = PyBytes_FromStringAndSize((char *)output, zst.total_out); else zlib_error(zst, err, "while finishing compression"); @@ -219,14 +219,14 @@ zst.avail_in = length; zst.avail_out = r_strlen; - if (!(result_str = PyByteArray_FromStringAndSize(NULL, r_strlen))) { + if (!(result_str = PyBytes_FromStringAndSize(NULL, r_strlen))) { PyBuffer_Release(&pinput); return NULL; } zst.zalloc = (alloc_func)NULL; zst.zfree = (free_func)Z_NULL; - zst.next_out = (Byte *)PyByteArray_AS_STRING(result_str); + zst.next_out = (Byte *)PyBytes_AS_STRING(result_str); zst.next_in = (Byte *)input; err = inflateInit2(&zst, wsize); @@ -266,12 +266,12 @@ /* fall through */ case(Z_OK): /* need more memory */ - if (PyByteArray_Resize(result_str, r_strlen << 1) < 0) { + if (_PyBytes_Resize(&result_str, r_strlen << 1) < 0) { inflateEnd(&zst); goto error; } zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(result_str) + r_strlen; + (unsigned char *)PyBytes_AS_STRING(result_str) + r_strlen; zst.avail_out = r_strlen; r_strlen = r_strlen << 1; break; @@ -288,7 +288,7 @@ goto error; } - if (PyByteArray_Resize(result_str, zst.total_out) < 0) + if (_PyBytes_Resize(&result_str, zst.total_out) < 0) goto error; PyBuffer_Release(&pinput); @@ -417,7 +417,7 @@ input = pinput.buf; inplen = pinput.len; - if (!(RetVal = PyByteArray_FromStringAndSize(NULL, length))) { + if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) { PyBuffer_Release(&pinput); return NULL; } @@ -428,7 +428,7 @@ self->zst.avail_in = inplen; self->zst.next_in = input; self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyByteArray_AS_STRING(RetVal); + self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); Py_BEGIN_ALLOW_THREADS err = deflate(&(self->zst), Z_NO_FLUSH); @@ -437,13 +437,13 @@ /* while Z_OK and the output buffer is full, there might be more output, so extend the output buffer and try again */ while (err == Z_OK && self->zst.avail_out == 0) { - if (PyByteArray_Resize(RetVal, length << 1) < 0) { + if (_PyBytes_Resize(&RetVal, length << 1) < 0) { Py_DECREF(RetVal); RetVal = NULL; goto error; } self->zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(RetVal) + length; + (unsigned char *)PyBytes_AS_STRING(RetVal) + length; self->zst.avail_out = length; length = length << 1; @@ -462,7 +462,7 @@ RetVal = NULL; goto error; } - if (PyByteArray_Resize(RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { Py_DECREF(RetVal); RetVal = NULL; } @@ -509,7 +509,7 @@ /* limit amount of data allocated to max_length */ if (max_length && length > max_length) length = max_length; - if (!(RetVal = PyByteArray_FromStringAndSize(NULL, length))) { + if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) { PyBuffer_Release(&pinput); return NULL; } @@ -520,7 +520,7 @@ self->zst.avail_in = inplen; self->zst.next_in = input; self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyByteArray_AS_STRING(RetVal); + self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); Py_BEGIN_ALLOW_THREADS err = inflate(&(self->zst), Z_SYNC_FLUSH); @@ -542,13 +542,13 @@ if (max_length && length > max_length) length = max_length; - if (PyByteArray_Resize(RetVal, length) < 0) { + if (_PyBytes_Resize(&RetVal, length) < 0) { Py_DECREF(RetVal); RetVal = NULL; goto error; } self->zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(RetVal) + old_length; + (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length; self->zst.avail_out = length - old_length; Py_BEGIN_ALLOW_THREADS @@ -594,7 +594,7 @@ goto error; } - if (PyByteArray_Resize(RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { Py_DECREF(RetVal); RetVal = NULL; } @@ -627,10 +627,10 @@ /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in doing any work at all; just return an empty string. */ if (flushmode == Z_NO_FLUSH) { - return PyByteArray_FromStringAndSize(NULL, 0); + return PyBytes_FromStringAndSize(NULL, 0); } - if (!(RetVal = PyByteArray_FromStringAndSize(NULL, length))) + if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) return NULL; ENTER_ZLIB @@ -638,7 +638,7 @@ start_total_out = self->zst.total_out; self->zst.avail_in = 0; self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyByteArray_AS_STRING(RetVal); + self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); Py_BEGIN_ALLOW_THREADS err = deflate(&(self->zst), flushmode); @@ -647,13 +647,13 @@ /* while Z_OK and the output buffer is full, there might be more output, so extend the output buffer and try again */ while (err == Z_OK && self->zst.avail_out == 0) { - if (PyByteArray_Resize(RetVal, length << 1) < 0) { + if (_PyBytes_Resize(&RetVal, length << 1) < 0) { Py_DECREF(RetVal); RetVal = NULL; goto error; } self->zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(RetVal) + length; + (unsigned char *)PyBytes_AS_STRING(RetVal) + length; self->zst.avail_out = length; length = length << 1; @@ -687,7 +687,7 @@ goto error; } - if (PyByteArray_Resize(RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { Py_DECREF(RetVal); RetVal = NULL; } @@ -822,7 +822,7 @@ PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); return NULL; } - if (!(retval = PyByteArray_FromStringAndSize(NULL, length))) + if (!(retval = PyBytes_FromStringAndSize(NULL, length))) return NULL; @@ -830,7 +830,7 @@ start_total_out = self->zst.total_out; self->zst.avail_out = length; - self->zst.next_out = (Byte *)PyByteArray_AS_STRING(retval); + self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval); Py_BEGIN_ALLOW_THREADS err = inflate(&(self->zst), Z_FINISH); @@ -839,12 +839,12 @@ /* while Z_OK and the output buffer is full, there might be more output, so extend the output buffer and try again */ while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { - if (PyByteArray_Resize(retval, length << 1) < 0) { + if (_PyBytes_Resize(&retval, length << 1) < 0) { Py_DECREF(retval); retval = NULL; goto error; } - self->zst.next_out = (Byte *)PyByteArray_AS_STRING(retval) + length; + self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length; self->zst.avail_out = length; length = length << 1; @@ -866,7 +866,7 @@ goto error; } } - if (PyByteArray_Resize(retval, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&retval, self->zst.total_out - start_total_out) < 0) { Py_DECREF(retval); retval = NULL; }