summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-04-12 14:34:16 (GMT)
committerGuido van Rossum <guido@python.org>1999-04-12 14:34:16 (GMT)
commit95bdd0b60466f38166e86b83d27ecff3df0352d5 (patch)
tree60b08c43d6a0b91369346454ac35f8a736144530
parent65f685b7aabf6b9526fc765235bbe10b979b6dcc (diff)
downloadcpython-95bdd0b60466f38166e86b83d27ecff3df0352d5.zip
cpython-95bdd0b60466f38166e86b83d27ecff3df0352d5.tar.gz
cpython-95bdd0b60466f38166e86b83d27ecff3df0352d5.tar.bz2
Two different changes.
1. Jack Jansen reports that on the Mac, the time may be negative, and solves this by adding a write32u() function that writes an unsigned long. 2. On 64-bit platforms the CRC comparison fails; I've fixed this by casting both values to be compared to "unsigned long" i.e. modulo 0x100000000L.
-rw-r--r--Lib/gzip.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 9efeaf0..1c196a8 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -17,6 +17,9 @@ READ, WRITE = 1, 2
def write32(output, value):
output.write(struct.pack("<l", value))
+def write32u(output, value):
+ output.write(struct.pack("<L", value))
+
def read32(input):
return struct.unpack("<l", input.read(4))[0]
@@ -83,7 +86,7 @@ class GzipFile:
if fname:
flags = FNAME
self.fileobj.write(chr(flags))
- write32(self.fileobj, int(time.time()))
+ write32u(self.fileobj, long(time.time()))
self.fileobj.write('\002')
self.fileobj.write('\377')
if fname:
@@ -231,7 +234,7 @@ class GzipFile:
self.fileobj.seek(-8, 1)
crc32 = read32(self.fileobj)
isize = read32(self.fileobj)
- if crc32 != self.crc:
+ if crc32%0x100000000L != self.crc%0x100000000L:
raise ValueError, "CRC check failed"
elif isize != self.size:
raise ValueError, "Incorrect length of data produced"