comparison Python/pythonrun.c @ 43855:ee081609cee8

Added some additional checks for sys.std?? is None, see #1440
author Christian Heimes <christian@cheimes.de>
date Thu, 15 Nov 2007 02:26:46 +0000
parents e162e881ea5f
children 8ed0280c2ab6
comparison
equal deleted inserted replaced
43854:3c29d73c7769 43855:ee081609cee8
333 { 333 {
334 PyObject *fout = PySys_GetObject("stdout"); 334 PyObject *fout = PySys_GetObject("stdout");
335 PyObject *ferr = PySys_GetObject("stderr"); 335 PyObject *ferr = PySys_GetObject("stderr");
336 PyObject *tmp; 336 PyObject *tmp;
337 337
338 if (fout != NULL) { 338 if (fout != NULL && fout != Py_None) {
339 tmp = PyObject_CallMethod(fout, "flush", ""); 339 tmp = PyObject_CallMethod(fout, "flush", "");
340 if (tmp == NULL) 340 if (tmp == NULL)
341 PyErr_Clear(); 341 PyErr_Clear();
342 else 342 else
343 Py_DECREF(tmp); 343 Py_DECREF(tmp);
344 } 344 }
345 345
346 if (ferr != NULL) { 346 if (ferr != NULL || ferr != Py_None) {
347 tmp = PyObject_CallMethod(ferr, "flush", ""); 347 tmp = PyObject_CallMethod(ferr, "flush", "");
348 if (tmp == NULL) 348 if (tmp == NULL)
349 PyErr_Clear(); 349 PyErr_Clear();
350 else 350 else
351 Py_DECREF(tmp); 351 Py_DECREF(tmp);
691 { 691 {
692 PyObject *m, *f; 692 PyObject *m, *f;
693 m = PyImport_ImportModule("site"); 693 m = PyImport_ImportModule("site");
694 if (m == NULL) { 694 if (m == NULL) {
695 f = PySys_GetObject("stderr"); 695 f = PySys_GetObject("stderr");
696 if (f == NULL || f == Py_None)
697 return;
696 if (Py_VerboseFlag) { 698 if (Py_VerboseFlag) {
697 PyFile_WriteString( 699 PyFile_WriteString(
698 "'import site' failed; traceback:\n", f); 700 "'import site' failed; traceback:\n", f);
699 PyErr_Print(); 701 PyErr_Print();
700 } 702 }
898 int errcode = 0; 900 int errcode = 0;
899 901
900 if (fp == stdin) { 902 if (fp == stdin) {
901 /* Fetch encoding from sys.stdin */ 903 /* Fetch encoding from sys.stdin */
902 v = PySys_GetObject("stdin"); 904 v = PySys_GetObject("stdin");
903 if (!v) 905 if (v == NULL || v == Py_None)
904 return -1; 906 return -1;
905 oenc = PyObject_GetAttrString(v, "encoding"); 907 oenc = PyObject_GetAttrString(v, "encoding");
906 if (!oenc) 908 if (!oenc)
907 return -1; 909 return -1;
908 enc = PyUnicode_AsString(oenc); 910 enc = PyUnicode_AsString(oenc);
1291 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) 1293 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
1292 { 1294 {
1293 int err = 0; 1295 int err = 0;
1294 PyObject *f = PySys_GetObject("stderr"); 1296 PyObject *f = PySys_GetObject("stderr");
1295 Py_INCREF(value); 1297 Py_INCREF(value);
1296 if (f == NULL) { 1298 if (f == Py_None) {
1299 /* pass */
1300 }
1301 else if (f == NULL) {
1297 _PyObject_Dump(value); 1302 _PyObject_Dump(value);
1298 fprintf(stderr, "lost sys.stderr\n"); 1303 fprintf(stderr, "lost sys.stderr\n");
1299 } 1304 }
1300 else { 1305 else {
1301 fflush(stdout); 1306 fflush(stdout);