mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
Issue #10276: test_zlib checks that inputs of 2 GB are handled correctly by
crc32() and adler32(). Patch written by Steffen Daode Nurpmeso.
This commit is contained in:
parent
0a92d1849e
commit
f9fb43492c
1 changed files with 38 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue