]> granicus.if.org Git - python/commitdiff
make _tkinter._flatten check the result of PySequence_Size for errors #3880
authorBenjamin Peterson <benjamin@python.org>
Fri, 30 Jan 2009 02:24:39 +0000 (02:24 +0000)
committerBenjamin Peterson <benjamin@python.org>
Fri, 30 Jan 2009 02:24:39 +0000 (02:24 +0000)
Lib/test/test_tcl.py
Modules/_tkinter.c

index fa170ef58dd660de756afc47c38ea43a823a1782..26e294ce1360d6a83982065bedb3f98f0db19777 100644 (file)
@@ -2,10 +2,19 @@
 
 import unittest
 import os
+import _tkinter
 from test import test_support
 from Tkinter import Tcl
 from _tkinter import TclError
 
+
+class TkinterTest(unittest.TestCase):
+
+    def testFlattenLen(self):
+        # flatten(<object with no length>)
+        self.assertRaises(TypeError, _tkinter._flatten, True)
+
+
 class TclTest(unittest.TestCase):
 
     def setUp(self):
@@ -151,7 +160,7 @@ class TclTest(unittest.TestCase):
                 os.environ['DISPLAY'] = old_display
 
 def test_main():
-    test_support.run_unittest(TclTest)
+    test_support.run_unittest(TclTest, TkinterTest)
 
 if __name__ == "__main__":
     test_main()
index 93e7edc546c0d0b78eeea8b90d243cac3b14976b..6e89f2f9c32510bc882ea2b39e2cecd44c974f62 100644 (file)
@@ -2908,7 +2908,9 @@ Tkinter_Flatten(PyObject* self, PyObject* args)
                return NULL;
 
        context.maxsize = PySequence_Size(item);
-       if (context.maxsize <= 0)
+       if (context.maxsize < 0)
+               return NULL;
+       if (context.maxsize == 0)
                return PyTuple_New(0);
        
        context.tuple = PyTuple_New(context.maxsize);