]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #23815: Fixed crashes related to directly created instances of types in
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 8 May 2016 17:46:22 +0000 (20:46 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 8 May 2016 17:46:22 +0000 (20:46 +0300)
_tkinter and curses.panel modules.

Lib/test/test_curses.py
Lib/test/test_tcl.py
Misc/NEWS
Modules/_curses_panel.c
Modules/_tkinter.c

index 274704152007d01b383422f72916528ea198cabc..222105ed755b24cf1d63f2e1ab57e1e9e0a13c78 100644 (file)
@@ -285,6 +285,10 @@ class TestCurses(unittest.TestCase):
         panel.set_userptr(A())
         panel.set_userptr(None)
 
+    def test_new_curses_panel(self):
+        panel = curses.panel.new_panel(self.stdscr)
+        self.assertRaises(TypeError, type(panel))
+
     @unittest.skipUnless(hasattr(curses, 'resizeterm'),
                            'resizeterm not available')
     def test_resize_term(self):
index 25f6edecf5fc8694fd51a15a2692d097e707895d..8ffd1853147e49dfa93ca61d53aba4cd2f9eada0 100644 (file)
@@ -649,6 +649,8 @@ class TclTest(unittest.TestCase):
                 expected = {'a': (1, 2, 3), 'something': 'foo', 'status': ''}
             self.assertEqual(splitdict(tcl, arg), expected)
 
+    def test_new_tcl_obj(self):
+        self.assertRaises(TypeError, _tkinter.Tcl_Obj)
 
 class BigmemTclTest(unittest.TestCase):
 
index f31b1721e3300d026c9d6b61921ab830cfeaf8cb..870f5a3e82f9651d90ce5f51753c92d07de50b0e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -116,6 +116,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #23815: Fixed crashes related to directly created instances of types in
+  _tkinter and curses.panel modules.
+
 - Issue #17765: weakref.ref() no longer silently ignores keyword arguments.
   Patch by Georg Brandl.
 
index 759b73109d25c16028678dc985117e6848bae23e..c77e614724e0022ea033c7c2aef61f4dffccbd70 100644 (file)
@@ -506,10 +506,11 @@ PyInit__curses_panel(void)
     d = PyModule_GetDict(m);
 
     /* Initialize object type */
-    _curses_panelstate(m)->PyCursesPanel_Type = \
-        PyType_FromSpec(&PyCursesPanel_Type_spec);
-    if (_curses_panelstate(m)->PyCursesPanel_Type == NULL)
+    v = PyType_FromSpec(&PyCursesPanel_Type_spec);
+    if (v == NULL)
         goto fail;
+    ((PyTypeObject *)v)->tp_new = NULL;
+    _curses_panelstate(m)->PyCursesPanel_Type = v;
 
     import_curses();
     if (PyErr_Occurred())
index 41ad5f91f7e6abff75e71fd687641915321ea2bb..cf56fa836ac2bbaaea54d88b4bbc37501f497377 100644 (file)
@@ -3551,6 +3551,7 @@ PyInit__tkinter(void)
         Py_DECREF(m);
         return NULL;
     }
+    ((PyTypeObject *)o)->tp_new = NULL;
     if (PyModule_AddObject(m, "TkappType", o)) {
         Py_DECREF(o);
         Py_DECREF(m);
@@ -3563,6 +3564,7 @@ PyInit__tkinter(void)
         Py_DECREF(m);
         return NULL;
     }
+    ((PyTypeObject *)o)->tp_new = NULL;
     if (PyModule_AddObject(m, "TkttType", o)) {
         Py_DECREF(o);
         Py_DECREF(m);
@@ -3575,6 +3577,7 @@ PyInit__tkinter(void)
         Py_DECREF(m);
         return NULL;
     }
+    ((PyTypeObject *)o)->tp_new = NULL;
     if (PyModule_AddObject(m, "Tcl_Obj", o)) {
         Py_DECREF(o);
         Py_DECREF(m);