Kaydet (Commit) 7e3ba2a6 authored tarafından Georg Brandl's avatar Georg Brandl

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

sys.stdin is closed.
üst 534fe18e
...@@ -1432,6 +1432,14 @@ class BuiltinTest(unittest.TestCase): ...@@ -1432,6 +1432,14 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(input('testing\n'), 2) self.assertEqual(input('testing\n'), 2)
self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.') self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
self.assertEqual(raw_input('testing\n'), 'Dear John') 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") sys.stdin = cStringIO.StringIO("NULL\0")
self.assertRaises(TypeError, input, 42, 42) self.assertRaises(TypeError, input, 42, 42)
sys.stdin = cStringIO.StringIO(" 'whitespace'") sys.stdin = cStringIO.StringIO(" 'whitespace'")
......
...@@ -12,6 +12,9 @@ What's New in Python 2.5 release candidate 1? ...@@ -12,6 +12,9 @@ What's New in Python 2.5 release candidate 1?
Core and builtins 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 - On Windows, the PyErr_Warn function is now exported from
the Python dll again. the Python dll again.
......
...@@ -1725,7 +1725,7 @@ builtin_raw_input(PyObject *self, PyObject *args) ...@@ -1725,7 +1725,7 @@ builtin_raw_input(PyObject *self, PyObject *args)
if (PyFile_WriteString(" ", fout) != 0) if (PyFile_WriteString(" ", fout) != 0)
return NULL; 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(fin)))
&& isatty(fileno(PyFile_AsFile(fout)))) { && isatty(fileno(PyFile_AsFile(fout)))) {
PyObject *po; PyObject *po;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment