mirror of
https://github.com/python/cpython.git
synced 2025-07-28 13:44:43 +00:00
Bug #1535165: fixed a segfault in input() and raw_input() when
sys.stdin is closed.
This commit is contained in:
parent
534fe18e17
commit
7e3ba2a699
3 changed files with 12 additions and 1 deletions
|
@ -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?
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue