]> granicus.if.org Git - python/commitdiff
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
authorVictor Stinner <victor.stinner@haypocalc.com>
Wed, 19 May 2010 00:34:15 +0000 (00:34 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Wed, 19 May 2010 00:34:15 +0000 (00:34 +0000)
Python/pythonrun.c

index d3981961ee5a67aa55271cb9a223ed87e1a4da2b..58388c22d90c2f8a8eb8f65ed04d15b65ca3c10d 100644 (file)
@@ -138,8 +138,8 @@ add_flag(int flag, const char *envs)
 static char*
 get_codeset(void)
 {
-    char* codeset;
-    PyObject *codec, *name;
+    char* codeset, *name_str;
+    PyObject *codec, *name = NULL;
 
     codeset = nl_langinfo(CODESET);
     if (!codeset || codeset[0] == '\0')
@@ -154,12 +154,16 @@ get_codeset(void)
     if (!name)
         goto error;
 
-    codeset = strdup(_PyUnicode_AsString(name));
+    name_str = _PyUnicode_AsString(name);
+    if (name == NULL)
+        goto error;
+    codeset = strdup(name_str);
     Py_DECREF(name);
     return codeset;
 
 error:
     Py_XDECREF(codec);
+    Py_XDECREF(name);
     return NULL;
 }
 #endif
@@ -1060,22 +1064,34 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags
         if (!oenc)
             return -1;
         enc = _PyUnicode_AsString(oenc);
+        if (enc == NULL)
+            return -1;
     }
     v = PySys_GetObject("ps1");
     if (v != NULL) {
         v = PyObject_Str(v);
         if (v == NULL)
             PyErr_Clear();
-        else if (PyUnicode_Check(v))
+        else if (PyUnicode_Check(v)) {
             ps1 = _PyUnicode_AsString(v);
+            if (ps1 == NULL) {
+                PyErr_Clear();
+                ps1 = "";
+            }
+        }
     }
     w = PySys_GetObject("ps2");
     if (w != NULL) {
         w = PyObject_Str(w);
         if (w == NULL)
             PyErr_Clear();
-        else if (PyUnicode_Check(w))
+        else if (PyUnicode_Check(w)) {
             ps2 = _PyUnicode_AsString(w);
+            if (ps2 == NULL) {
+                PyErr_Clear();
+                ps2 = "";
+            }
+        }
     }
     arena = PyArena_New();
     if (arena == NULL) {