Bug #1535165: fixed a segfault in input() and raw_input() when

sys.stdin is closed.
This commit is contained in:
Georg Brandl 2006-08-06 08:23:54 +00:00
parent 534fe18e17
commit 7e3ba2a699
3 changed files with 12 additions and 1 deletions

View File

@ -1432,6 +1432,14 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(input('testing\n'), 2)
self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
self.assertEqual(raw_input('testing\n'), 'Dear John')
# SF 1535165: don't segfault on closed stdin
# sys.stdout must be a regular file for triggering
sys.stdout = savestdout
sys.stdin.close()
self.assertRaises(ValueError, input, 'prompt')
sys.stdout = BitBucket()
sys.stdin = cStringIO.StringIO("NULL\0")
self.assertRaises(TypeError, input, 42, 42)
sys.stdin = cStringIO.StringIO(" 'whitespace'")

View File

@ -12,6 +12,9 @@ What's New in Python 2.5 release candidate 1?
Core and builtins
-----------------
- Bug #1535165: fixed a segfault in input() and raw_input() when
sys.stdin is closed.
- On Windows, the PyErr_Warn function is now exported from
the Python dll again.

View File

@ -1725,7 +1725,7 @@ builtin_raw_input(PyObject *self, PyObject *args)
if (PyFile_WriteString(" ", fout) != 0)
return NULL;
}
if (PyFile_Check(fin) && PyFile_Check(fout)
if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
&& isatty(fileno(PyFile_AsFile(fin)))
&& isatty(fileno(PyFile_AsFile(fout)))) {
PyObject *po;