From: Victor Stinner Date: Thu, 31 Oct 2013 13:51:38 +0000 (+0100) Subject: Issue #19437: Fix show_warning() of _warnings, stop at the first error to not X-Git-Tag: v3.4.0b1~453 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae233eab5cc9a932a80063003602fd0a62e4be05;p=thirdparty%2FPython%2Fcpython.git Issue #19437: Fix show_warning() of _warnings, stop at the first error to not call a Python function with an exception set --- diff --git a/Python/_warnings.c b/Python/_warnings.c index 74ac8c65bfff..d9f3297dd3d1 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -263,23 +263,28 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject name = _PyObject_GetAttrId(category, &PyId___name__); if (name == NULL) /* XXX Can an object lack a '__name__' attribute? */ - return; + goto error; f_stderr = PySys_GetObject("stderr"); if (f_stderr == NULL) { fprintf(stderr, "lost sys.stderr\n"); - Py_DECREF(name); - return; + goto error; } /* Print "filename:lineno: category: text\n" */ - PyFile_WriteObject(filename, f_stderr, Py_PRINT_RAW); - PyFile_WriteString(lineno_str, f_stderr); - PyFile_WriteObject(name, f_stderr, Py_PRINT_RAW); - PyFile_WriteString(": ", f_stderr); - PyFile_WriteObject(text, f_stderr, Py_PRINT_RAW); - PyFile_WriteString("\n", f_stderr); - Py_XDECREF(name); + if (PyFile_WriteObject(filename, f_stderr, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString(lineno_str, f_stderr) < 0) + goto error; + if (PyFile_WriteObject(name, f_stderr, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString(": ", f_stderr) < 0) + goto error; + if (PyFile_WriteObject(text, f_stderr, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString("\n", f_stderr) < 0) + goto error; + Py_CLEAR(name); /* Print " source_line\n" */ if (sourceline) { @@ -314,6 +319,7 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject } error: + Py_XDECREF(name); PyErr_Clear(); }