diff options
author | Georg Brandl <georg@python.org> | 2006-08-06 08:23:54 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2006-08-06 08:23:54 (GMT) |
commit | 7e3ba2a699d6a5660fc7bf239b2090d5b2961b8c (patch) | |
tree | 66fae308335a0c755800dd2a16563b5b2a5e41c3 | |
parent | 534fe18e171a41ac216f3eeb1794af61adf50c5b (diff) | |
download | cpython-7e3ba2a699d6a5660fc7bf239b2090d5b2961b8c.zip cpython-7e3ba2a699d6a5660fc7bf239b2090d5b2961b8c.tar.gz cpython-7e3ba2a699d6a5660fc7bf239b2090d5b2961b8c.tar.bz2 |
Bug #1535165: fixed a segfault in input() and raw_input() when
sys.stdin is closed.
-rw-r--r-- | Lib/test/test_builtin.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Python/bltinmodule.c | 2 |
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index bcb4424..eca284a 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -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'") @@ -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. diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 6fcc05e..58dc7c9 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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; |