]> granicus.if.org Git - python/commitdiff
Two different changes.
authorGuido van Rossum <guido@python.org>
Mon, 12 Apr 1999 14:34:16 +0000 (14:34 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 12 Apr 1999 14:34:16 +0000 (14:34 +0000)
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.

Lib/gzip.py

index 9efeaf0198fc3a439a45320d4dd6435c4b87b55c..1c196a8ed99a0da475150f3e9ca0c66b08656053 100644 (file)
@@ -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"