From 078f0f5a6d7dd44ad58b3a039ca1c34c5d9449b5 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Sun, 17 Aug 2008 12:59:57 +0000 Subject: Issue #3575: Incremental decoder's decode function now takes bytearray by using 's*' instead of 't#' --- Misc/NEWS | 3 +++ Modules/cjkcodecs/multibytecodec.c | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 0cbebc5..0e2adb0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -30,6 +30,9 @@ Core and Builtins Library ------- +- Issue #3575: Incremental decoder's decode function now takes bytearray + by using 's*' instead of 't#'. + - Issue #2222: Fixed reference leak when occured os.rename() fails unicode conversion on 2nd parameter. (windows only) diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 95b2278..67c25b1 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1034,12 +1034,15 @@ mbidecoder_decode(MultibyteIncrementalDecoderObject *self, { MultibyteDecodeBuffer buf; char *data, *wdata = NULL; + Py_buffer pdata; Py_ssize_t wsize, finalsize = 0, size, origpending; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "t#|i:decode", - incrementalkwarglist, &data, &size, &final)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s*|i:decode", + incrementalkwarglist, &pdata, &final)) return NULL; + data = pdata.buf; + size = pdata.len; buf.outobj = buf.excobj = NULL; origpending = self->pendingsize; @@ -1088,12 +1091,14 @@ mbidecoder_decode(MultibyteIncrementalDecoderObject *self, if (PyUnicode_Resize(&buf.outobj, finalsize) == -1) goto errorexit; + PyBuffer_Release(&pdata); if (wdata != data) PyMem_Del(wdata); Py_XDECREF(buf.excobj); return buf.outobj; errorexit: + PyBuffer_Release(&pdata); if (wdata != NULL && wdata != data) PyMem_Del(wdata); Py_XDECREF(buf.excobj); -- cgit v0.12