summaryrefslogtreecommitdiffstats
path: root/Modules/cjkcodecs
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-11-21 02:01:27 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-11-21 02:01:27 (GMT)
commit4eea84946908a132375451cdd8cb7ef682791c5c (patch)
tree3e80be52ed1fd8d4da98726e32a53adc05fcf3a5 /Modules/cjkcodecs
parent9a80faba886ab081e7ccb30440f3c8e158738bab (diff)
downloadcpython-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.c13
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);
}