diff --git a/Misc/NEWS b/Misc/NEWS index a914ebe14de..ef860a4cc60 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -144,6 +144,9 @@ Extension Modules - Issue #3492 and #3790: Fixed the zlib module and zipimport module uses of mutable bytearray objects where they should have been using immutable bytes. +- Issue #3797: Fixed the dbm, marshal, mmap, ossaudiodev, & winreg modules to + return bytes objects instead of bytearray objects. + Tools/Demos ----------- diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 78eba3648f0..d43acdc5e9e 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -111,7 +111,7 @@ dbm_subscript(dbmobject *dp, register PyObject *key) PyErr_SetString(DbmError, ""); return NULL; } - return PyByteArray_FromStringAndSize(drec.dptr, drec.dsize); + return PyBytes_FromStringAndSize(drec.dptr, drec.dsize); } static int @@ -188,7 +188,7 @@ dbm_keys(register dbmobject *dp, PyObject *unused) return NULL; for (key = dbm_firstkey(dp->di_dbm); key.dptr; key = dbm_nextkey(dp->di_dbm)) { - item = PyByteArray_FromStringAndSize(key.dptr, key.dsize); + item = PyBytes_FromStringAndSize(key.dptr, key.dsize); if (item == NULL) { Py_DECREF(v); return NULL; @@ -260,7 +260,7 @@ dbm_get(register dbmobject *dp, PyObject *args) check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); if (val.dptr != NULL) - return PyByteArray_FromStringAndSize(val.dptr, val.dsize); + return PyBytes_FromStringAndSize(val.dptr, val.dsize); else { Py_INCREF(defvalue); return defvalue; @@ -283,9 +283,9 @@ dbm_setdefault(register dbmobject *dp, PyObject *args) check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); if (val.dptr != NULL) - return PyByteArray_FromStringAndSize(val.dptr, val.dsize); + return PyBytes_FromStringAndSize(val.dptr, val.dsize); if (defvalue == NULL) { - defvalue = PyByteArray_FromStringAndSize(NULL, 0); + defvalue = PyBytes_FromStringAndSize(NULL, 0); if (defvalue == NULL) return NULL; val.dptr = NULL; diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 9adef9bebb2..6a2ebfd45da 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -228,7 +228,7 @@ mmap_read_line_method(mmap_object *self, else ++eol; /* we're interested in the position after the newline. */ - result = PyByteArray_FromStringAndSize(start, (eol - start)); + result = PyBytes_FromStringAndSize(start, (eol - start)); self->pos += (eol - start); return result; } @@ -248,7 +248,7 @@ mmap_read_method(mmap_object *self, if (num_bytes > self->size - self->pos) { num_bytes -= (self->pos+num_bytes) - self->size; } - result = PyByteArray_FromStringAndSize(self->data+self->pos, num_bytes); + result = PyBytes_FromStringAndSize(self->data+self->pos, num_bytes); self->pos += num_bytes; return result; } @@ -679,7 +679,7 @@ mmap_item(mmap_object *self, Py_ssize_t i) PyErr_SetString(PyExc_IndexError, "mmap index out of range"); return NULL; } - return PyByteArray_FromStringAndSize(self->data + i, 1); + return PyBytes_FromStringAndSize(self->data + i, 1); } static PyObject * @@ -769,14 +769,14 @@ mmap_ass_item(mmap_object *self, Py_ssize_t i, PyObject *v) "mmap object doesn't support item deletion"); return -1; } - if (! (PyByteArray_Check(v) && PyByteArray_Size(v)==1) ) { + if (! (PyBytes_Check(v) && PyBytes_Size(v)==1) ) { PyErr_SetString(PyExc_IndexError, "mmap assignment must be length-1 bytes()"); return -1; } if (!is_writable(self)) return -1; - buf = PyByteArray_AsString(v); + buf = PyBytes_AsString(v); self->data[i] = buf[0]; return 0; } diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 5828c3f56d1..677f9ac0c79 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -366,10 +366,10 @@ oss_read(oss_audio_t *self, PyObject *args) if (!PyArg_ParseTuple(args, "i:read", &size)) return NULL; - rv = PyByteArray_FromStringAndSize(NULL, size); + rv = PyBytes_FromStringAndSize(NULL, size); if (rv == NULL) return NULL; - cp = PyByteArray_AS_STRING(rv); + cp = PyBytes_AS_STRING(rv); Py_BEGIN_ALLOW_THREADS count = read(self->fd, cp, size); @@ -381,7 +381,7 @@ oss_read(oss_audio_t *self, PyObject *args) return NULL; } self->icount += count; - PyByteArray_Resize(rv, count); + _PyBytes_Resize(&rv, count); return rv; } diff --git a/PC/winreg.c b/PC/winreg.c index 1536e1735f4..7d1d8164e8f 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -896,7 +896,7 @@ Reg2Py(BYTE *retDataBuf, DWORD retDataSize, DWORD typ) obData = Py_None; } else - obData = PyByteArray_FromStringAndSize( + obData = PyBytes_FromStringAndSize( (char *)retDataBuf, retDataSize); break; } diff --git a/Python/marshal.c b/Python/marshal.c index d3f2d7f48f1..e7981b8eb90 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1093,7 +1093,7 @@ PyMarshal_WriteObjectToString(PyObject *x, int version) } if (wf.str != NULL) { /* XXX Quick hack -- need to do this differently */ - res = PyByteArray_FromObject(wf.str); + res = PyBytes_FromObject(wf.str); Py_DECREF(wf.str); } return res; @@ -1134,9 +1134,9 @@ marshal_load(PyObject *self, PyObject *f) rf.ptr = PyBytes_AS_STRING(data); rf.end = rf.ptr + PyBytes_GET_SIZE(data); } - else if (PyByteArray_Check(data)) { - rf.ptr = PyByteArray_AS_STRING(data); - rf.end = rf.ptr + PyByteArray_GET_SIZE(data); + else if (PyBytes_Check(data)) { + rf.ptr = PyBytes_AS_STRING(data); + rf.end = rf.ptr + PyBytes_GET_SIZE(data); } else { PyErr_Format(PyExc_TypeError,