diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2007-06-09 03:36:34 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2007-06-09 03:36:34 (GMT) |
commit | 7dbd2a3720be7f54068f8a8f3fa2176dd2ab1ebe (patch) | |
tree | 6a7fe07925a49b6d79d09e562816ec29fa9b6482 /Lib/test/test_str.py | |
parent | ea7f88e3d9cc42d7cfa9e87cc248103532c9d4d4 (diff) | |
download | cpython-7dbd2a3720be7f54068f8a8f3fa2176dd2ab1ebe.zip cpython-7dbd2a3720be7f54068f8a8f3fa2176dd2ab1ebe.tar.gz cpython-7dbd2a3720be7f54068f8a8f3fa2176dd2ab1ebe.tar.bz2 |
Prevent expandtabs() on string and unicode objects from causing a segfault when
a large width is passed on 32-bit platforms. Found by Google.
It would be good for people to review this especially carefully and verify
I don't have an off by one error and there is no other way to cause overflow.
Diffstat (limited to 'Lib/test/test_str.py')
-rw-r--r-- | Lib/test/test_str.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_str.py b/Lib/test/test_str.py index 45942a6..1853517 100644 --- a/Lib/test/test_str.py +++ b/Lib/test/test_str.py @@ -1,4 +1,6 @@ + import unittest +import sys from test import test_support, string_tests @@ -82,6 +84,15 @@ class StrTest( self.assertEqual(str(Foo9("foo")), "string") self.assertEqual(unicode(Foo9("foo")), u"not unicode") + def test_expandtabs_overflows_gracefully(self): + # This test only affects 32-bit platforms because expandtabs can only take + # an int as the max value, not a 64-bit C long. If expandtabs is changed + # to take a 64-bit long, this test should apply to all platforms. + if sys.maxint > (1 << 32): + return + self.assertRaises(OverflowError, 't\tt\t'.expandtabs, sys.maxint) + + def test_main(): test_support.run_unittest(StrTest) |