]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Use PyUnicode_AsUnicodeAndSize() instead of PyUnicode_GET_SIZE()
authorVictor Stinner <victor.stinner@haypocalc.com>
Tue, 11 Oct 2011 19:55:01 +0000 (21:55 +0200)
committerVictor Stinner <victor.stinner@haypocalc.com>
Tue, 11 Oct 2011 19:55:01 +0000 (21:55 +0200)
Modules/posixmodule.c
Python/getargs.c
Python/import.c

index 30760edce44cf1611bddc378145f6fba5f7cfd86..da0bef0ae54ff0d79044632c19139b4faf76eb67 100644 (file)
@@ -2529,10 +2529,9 @@ posix_listdir(PyObject *self, PyObject *args)
             po_wchars = L".";
             len = 1;
         } else {
-            po_wchars = PyUnicode_AsUnicode(po);
+            po_wchars = PyUnicode_AsUnicodeAndSize(po, &len);
             if (po_wchars == NULL)
                 return NULL;
-            len = PyUnicode_GET_SIZE(po);
         }
         /* Overallocate for \\*.*\0 */
         wnamebuf = malloc((len + 5) * sizeof(wchar_t));
index 2c2db36193c8bf6e20558d471d0d7016a4115cd0..f2cc9f45090ff9abec0f8aa3aa5e2500b6fd62e7 100644 (file)
@@ -982,10 +982,11 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
                 STORE_SIZE(0);
             }
             else if (PyUnicode_Check(arg)) {
-                *p = PyUnicode_AS_UNICODE(arg);
+                Py_ssize_t len;
+                *p = PyUnicode_AsUnicodeAndSize(arg, &len);
                 if (*p == NULL)
                     RETURN_ERR_OCCURRED;
-                STORE_SIZE(PyUnicode_GET_SIZE(arg));
+                STORE_SIZE(len);
             }
             else
                 return converterr("str or None", arg, msgbuf, bufsize);
@@ -995,10 +996,11 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
             if (c == 'Z' && arg == Py_None)
                 *p = NULL;
             else if (PyUnicode_Check(arg)) {
-                *p = PyUnicode_AS_UNICODE(arg);
+                Py_ssize_t len;
+                *p = PyUnicode_AsUnicodeAndSize(arg, &len);
                 if (*p == NULL)
                     RETURN_ERR_OCCURRED;
-                if (Py_UNICODE_strlen(*p) != PyUnicode_GET_SIZE(arg))
+                if (Py_UNICODE_strlen(*p) != len)
                     return converterr(
                         "str without null character or None",
                         arg, msgbuf, bufsize);
index 3d6c6ed1d4f6b0a8bc658553b7ac1c3ed107625f..6f564a65da10ad2cd3fea75c381c1870dd978e08 100644 (file)
@@ -2282,6 +2282,8 @@ case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
     WIN32_FIND_DATAW data;
     HANDLE h;
     int cmp;
+    wchar_t *wname;
+    Py_ssizet wname_len;
 
     if (Py_GETENV("PYTHONCASEOK") != NULL)
         return 1;
@@ -2294,9 +2296,12 @@ case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
         return 0;
     }
     FindClose(h);
-    cmp = wcsncmp(data.cFileName,
-                  PyUnicode_AS_UNICODE(name),
-                  PyUnicode_GET_SIZE(name));
+
+    wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
+    if (wname == NULL)
+        return -1;
+
+    cmp = wcsncmp(data.cFileName, wname, wname_len);
     return cmp == 0;
 #elif defined(USE_CASE_OK_BYTES)
     int match;