From 47a00f3d1a1fe3774d92e5d9263ef3bff79dd4ac Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 2 Dec 2012 11:20:28 -0500 Subject: support encoding error handlers that return bytes (closes #16585) --- Modules/cjkcodecs/multibytecodec.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'Modules/cjkcodecs/multibytecodec.c') diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 40717d8ba9..c032cdb0ed 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -316,7 +316,7 @@ multibytecodec_encerror(MultibyteCodec *codec, goto errorexit; if (!PyTuple_Check(retobj) || PyTuple_GET_SIZE(retobj) != 2 || - !PyUnicode_Check((tobj = PyTuple_GET_ITEM(retobj, 0))) || + (!PyUnicode_Check((tobj = PyTuple_GET_ITEM(retobj, 0))) && !PyBytes_Check(tobj)) || !PyLong_Check(PyTuple_GET_ITEM(retobj, 1))) { PyErr_SetString(PyExc_TypeError, "encoding error handler must return " @@ -324,7 +324,7 @@ multibytecodec_encerror(MultibyteCodec *codec, goto errorexit; } - { + if (PyUnicode_Check(tobj)) { const Py_UNICODE *uraw = PyUnicode_AS_UNICODE(tobj); retstr = multibytecodec_encode(codec, state, &uraw, @@ -333,6 +333,10 @@ multibytecodec_encerror(MultibyteCodec *codec, if (retstr == NULL) goto errorexit; } + else { + Py_INCREF(tobj); + retstr = tobj; + } assert(PyBytes_Check(retstr)); retstrsize = PyBytes_GET_SIZE(retstr); -- cgit v1.2.1