[Python-checkins] cpython: CJK codecs checks for conversion to Py_UNICODE* failures

victor.stinner python-checkins at python.org
Mon Nov 21 02:59:17 CET 2011


http://hg.python.org/cpython/rev/abd505205a85
changeset:   73657:abd505205a85
user:        Victor Stinner <victor.stinner at haypocalc.com>
date:        Mon Nov 21 03:01:27 2011 +0100
summary:
  CJK codecs checks for conversion to Py_UNICODE* failures

files:
  Modules/cjkcodecs/multibytecodec.c |  13 ++++++++++---
  1 files changed, 10 insertions(+), 3 deletions(-)


diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -443,10 +443,12 @@
         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 @@
     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 @@
         }
     }
 
-    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 @@
         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);
     }

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list