diff options
author | Guido van Rossum <guido@python.org> | 1999-04-12 14:34:16 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-04-12 14:34:16 (GMT) |
commit | 95bdd0b60466f38166e86b83d27ecff3df0352d5 (patch) | |
tree | 60b08c43d6a0b91369346454ac35f8a736144530 /Lib/gzip.py | |
parent | 65f685b7aabf6b9526fc765235bbe10b979b6dcc (diff) | |
download | cpython-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.
Diffstat (limited to 'Lib/gzip.py')
-rw-r--r-- | Lib/gzip.py | 7 |
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" |