diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-05-19 00:34:15 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-05-19 00:34:15 (GMT) |
commit | 386fe71de1d0f35f53f082a88762e90d5b1c66bb (patch) | |
tree | 46b02dabd02ad789c51e692d32b4a2dd30cfb973 | |
parent | f3f22a278d146d54bddc14042573737c3440cf84 (diff) | |
download | cpython-386fe71de1d0f35f53f082a88762e90d5b1c66bb.zip cpython-386fe71de1d0f35f53f082a88762e90d5b1c66bb.tar.gz cpython-386fe71de1d0f35f53f082a88762e90d5b1c66bb.tar.bz2 |
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
-rw-r--r-- | Python/pythonrun.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index d398196..58388c2 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -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) { |