diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-12-02 16:20:28 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-12-02 16:20:28 (GMT) |
commit | 47a00f3d1a1fe3774d92e5d9263ef3bff79dd4ac (patch) | |
tree | 4aaec1d69dd4b4a28e615ee90ef081264d100c4b /Modules/cjkcodecs | |
parent | aff472394cf29c7712854043fbac6a032195fe77 (diff) | |
download | cpython-47a00f3d1a1fe3774d92e5d9263ef3bff79dd4ac.zip cpython-47a00f3d1a1fe3774d92e5d9263ef3bff79dd4ac.tar.gz cpython-47a00f3d1a1fe3774d92e5d9263ef3bff79dd4ac.tar.bz2 |
support encoding error handlers that return bytes (closes #16585)
Diffstat (limited to 'Modules/cjkcodecs')
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 40717d8..c032cdb 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); |