diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-11-21 02:01:27 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-11-21 02:01:27 (GMT) |
commit | 4eea84946908a132375451cdd8cb7ef682791c5c (patch) | |
tree | 3e80be52ed1fd8d4da98726e32a53adc05fcf3a5 /Modules/cjkcodecs | |
parent | 9a80faba886ab081e7ccb30440f3c8e158738bab (diff) | |
download | cpython-4eea84946908a132375451cdd8cb7ef682791c5c.zip cpython-4eea84946908a132375451cdd8cb7ef682791c5c.tar.gz cpython-4eea84946908a132375451cdd8cb7ef682791c5c.tar.bz2 |
CJK codecs checks for conversion to Py_UNICODE* failures
Diffstat (limited to 'Modules/cjkcodecs')
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 6b23523..1d6db95 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -443,10 +443,12 @@ multibytecodec_decerror(MultibyteCodec *codec, goto errorexit; } + if (PyUnicode_AsUnicode(retuni) == NULL) + goto errorexit; retunisize = PyUnicode_GET_SIZE(retuni); if (retunisize > 0) { REQUIRE_DECODEBUFFER(buf, retunisize); - memcpy((char *)buf->outbuf, PyUnicode_AS_DATA(retuni), + memcpy((char *)buf->outbuf, PyUnicode_AS_UNICODE(retuni), retunisize * Py_UNICODE_SIZE); buf->outbuf += retunisize; } @@ -746,6 +748,7 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx, PyObject *ucvt, *r = NULL; Py_UNICODE *inbuf, *inbuf_end, *inbuf_tmp = NULL; Py_ssize_t datalen, origpending; + wchar_t *data; if (PyUnicode_Check(unistr)) ucvt = NULL; @@ -761,7 +764,9 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx, } } - datalen = PyUnicode_GET_SIZE(unistr); + data = PyUnicode_AsUnicodeAndSize(unistr, &datalen); + if (data == NULL) + goto errorexit; origpending = ctx->pendingsize; if (origpending > 0) { @@ -852,7 +857,9 @@ decoder_prepare_buffer(MultibyteDecodeBuffer *buf, const char *data, buf->outobj = PyUnicode_FromUnicode(NULL, size); if (buf->outobj == NULL) return -1; - buf->outbuf = PyUnicode_AS_UNICODE(buf->outobj); + buf->outbuf = PyUnicode_AsUnicode(buf->outobj); + if (buf->outbuf == NULL) + return -1; buf->outbuf_end = buf->outbuf + PyUnicode_GET_SIZE(buf->outobj); } |