summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-05-19 00:34:15 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-05-19 00:34:15 (GMT)
commit386fe71de1d0f35f53f082a88762e90d5b1c66bb (patch)
tree46b02dabd02ad789c51e692d32b4a2dd30cfb973
parentf3f22a278d146d54bddc14042573737c3440cf84 (diff)
downloadcpython-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.c26
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) {