summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2009-01-30 02:24:39 +0000
committerBenjamin Peterson <benjamin@python.org>2009-01-30 02:24:39 +0000
commitb3619be995f9c4080dc38f2a8532bdf44503d840 (patch)
tree6af4178f32f1b9d92f15e853e1c69caa5cde22d7
parent4a69410e9f228cd05c0ca8fe653ffcae0d874b85 (diff)
downloadcpython-git-b3619be995f9c4080dc38f2a8532bdf44503d840.tar.gz
make _tkinter._flatten check the result of PySequence_Size for errors #3880
-rw-r--r--Lib/test/test_tcl.py11
-rw-r--r--Modules/_tkinter.c4
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index fa170ef58d..26e294ce13 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -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()
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 93e7edc546..6e89f2f9c3 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -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);