From 53378f92048686df3609708de58e151d87f7c0ea Mon Sep 17 00:00:00 2001 From: Eduardo Robles Elvira Date: Tue, 9 Jul 2013 16:14:14 +0200 Subject: [PATCH] adding crc checking when reading tar.gz files --- deltatar/tarfile.py | 20 +++++++++++++------- 1 files changed, 13 insertions(+), 7 deletions(-) diff --git a/deltatar/tarfile.py b/deltatar/tarfile.py index df44b2f..dc9554e 100644 --- a/deltatar/tarfile.py +++ b/deltatar/tarfile.py @@ -430,11 +430,11 @@ class _Stream: except ImportError: raise CompressionError("zlib module is not available") self.zlib = zlib - self.crc = zlib.crc32("") & 0xffffffffL if mode == "r": self._init_read_gz() else: self._init_write_gz() + self.crc = zlib.crc32("") & 0xffffffffL if comptype == "bz2": try: @@ -481,11 +481,10 @@ class _Stream: ''' Add a new gzip block, closing last one ''' - import zlib self.close(close_fileobj=False) self.closed = False self.concat_pos = 0L - self.crc = zlib.crc32("") & 0xffffffffL + self.crc = self.zlib.crc32("") & 0xffffffffL self.cmp = self.zlib.compressobj(9, self.zlib.DEFLATED, -self.zlib.MAX_WBITS, self.zlib.DEF_MEM_LEVEL, @@ -539,9 +538,13 @@ class _Stream: if close_fileobj and not self._extfileobj: self.fileobj.close() - # read the zlib crc - if not close_fileobj and self.mode == "r": - self.__read(8) + # read the zlib crc and length and check them + if not close_fileobj and self.mode == "r" and self.comptype == "gz": + read_crc = self.__read(4) + read_length = self.__read(4) + calculated_crc = self.crc & 0xffffffffL + if struct.unpack("