diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-05-03 15:19:23 +0200 |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-05-03 15:19:23 +0200 |
commit | 925817f682c4f71f35e7919e907c5182bca41679 (patch) | |
tree | 961f9a1eec9e1886a2e37983226f48dcac1b0aa4 /Lib | |
parent | dad799a67fc236d46345486343ecc7c230914846 (diff) | |
download | cpython-925817f682c4f71f35e7919e907c5182bca41679.tar.gz |
Issue #10276: test_zlib checks that inputs of 2 GB are handled correctly by
crc32() and adler32(). Patch written by Steffen Daode Nurpmeso.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_zlib.py | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index cbc3ed4982..3ef5713438 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -1,10 +1,16 @@ import unittest -from test import test_support +from test.test_support import TESTFN, run_unittest, import_module, unlink, requires import binascii import random from test.test_support import precisionbigmemtest, _1G +import sys -zlib = test_support.import_module('zlib') +try: + import mmap +except ImportError: + mmap = None + +zlib = import_module('zlib') class ChecksumTestCase(unittest.TestCase): @@ -66,6 +72,34 @@ class ChecksumTestCase(unittest.TestCase): zlib.crc32('spam', (2**31))) +# Issue #10276 - check that inputs of 2 GB are handled correctly. +# Be aware of issues #1202, #8650, #8651 and #10276 +class ChecksumBigBufferTestCase(unittest.TestCase): + int_max = 0x7FFFFFFF + + @unittest.skipUnless(mmap, "mmap() is not available.") + def test_big_buffer(self): + if sys.platform[:3] == 'win' or sys.platform == 'darwin': + requires('largefile', + 'test requires %s bytes and a long time to run' % + str(self.int_max)) + try: + with open(TESTFN, "wb+") as f: + f.seek(self.int_max-4) + f.write("asdf") + f.flush() + try: + m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) + self.assertEqual(zlib.crc32(m), 0x709418e7) + self.assertEqual(zlib.adler32(m), -2072837729) + finally: + m.close() + except (IOError, OverflowError): + raise unittest.SkipTest("filesystem doesn't have largefile support") + finally: + unlink(TESTFN) + + class ExceptionTestCase(unittest.TestCase): # make sure we generate some expected errors def test_badlevel(self): @@ -546,8 +580,9 @@ LAERTES def test_main(): - test_support.run_unittest( + run_unittest( ChecksumTestCase, + ChecksumBigBufferTestCase, ExceptionTestCase, CompressTestCase, CompressObjectTestCase |