diff -r 568858efd2a4 Modules/bz2module.c --- a/Modules/bz2module.c Sat Jul 05 22:39:59 2008 +0200 +++ b/Modules/bz2module.c Sun Jul 06 00:41:14 2008 +0200 @@ -1547,18 +1547,20 @@ static PyObject * static PyObject * BZ2Comp_compress(BZ2CompObject *self, PyObject *args) { - char *data; - int datasize; + PyObject *src = NULL; + Py_buffer buffer; int bufsize = SMALLCHUNK; PY_LONG_LONG totalout; PyObject *ret = NULL; bz_stream *bzs = &self->bzs; int bzerror; - if (!PyArg_ParseTuple(args, "s#:compress", &data, &datasize)) + if (!PyArg_ParseTuple(args, "O:compress", &src)) return NULL; - - if (datasize == 0) + if (PyObject_GetBuffer(src, &buffer, PyBUF_SIMPLE) == -1) + return NULL; + Py_INCREF(src); + if (buffer.len == 0) return PyString_FromString(""); ACQUIRE_LOCK(self); @@ -1572,8 +1574,8 @@ BZ2Comp_compress(BZ2CompObject *self, Py if (!ret) goto error; - bzs->next_in = data; - bzs->avail_in = datasize; + bzs->next_in = buffer.buf; + bzs->avail_in = buffer.len; bzs->next_out = BUF(ret); bzs->avail_out = bufsize; @@ -1604,10 +1606,14 @@ BZ2Comp_compress(BZ2CompObject *self, Py _PyString_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout)); RELEASE_LOCK(self); + PyObject_ReleaseBuffer(src, &buffer); + Py_DECREF(src); return ret; error: RELEASE_LOCK(self); + PyObject_ReleaseBuffer(src, &buffer); + Py_DECREF(src); Py_XDECREF(ret); return NULL; } diff -r 568858efd2a4 Objects/exceptions.c --- a/Objects/exceptions.c Sat Jul 05 22:39:59 2008 +0200 +++ b/Objects/exceptions.c Sun Jul 06 00:41:14 2008 +0200 @@ -2020,6 +2020,7 @@ _PyExc_Init(void) PRE_INIT(SystemError) PRE_INIT(ReferenceError) PRE_INIT(MemoryError) + PRE_INIT(BufferError) PRE_INIT(Warning) PRE_INIT(UserWarning) PRE_INIT(DeprecationWarning) @@ -2087,6 +2088,7 @@ _PyExc_Init(void) POST_INIT(SystemError) POST_INIT(ReferenceError) POST_INIT(MemoryError) + POST_INIT(BufferError) POST_INIT(Warning) POST_INIT(UserWarning) POST_INIT(DeprecationWarning)