@@ -9182,7 +9182,7 @@ def CheckCompressionType(infile, formatspecs=__file_format_multi_dict__, filesta
91829182def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, filestart=0, closefp=True):
91839183 compresscheck = CheckCompressionType(infile, formatspecs, filestart, False)
91849184 curloc = filestart
9185- if(not compresscheck and not hasattr (infile, "read" )):
9185+ if(not compresscheck and isinstance (infile, (str, bytes, os.PathLike) )):
91869186 fextname = os.path.splitext(infile)[1]
91879187 if(fextname == ".gz"):
91889188 compresscheck = "gzip"
@@ -9227,34 +9227,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92279227 return "rarfile"
92289228 elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
92299229 return "7zipfile"
9230- if(hasattr(infile, "read") or hasattr(infile, "write")):
9231- fp = UncompressFileAlt(infile, formatspecs, filestart)
9230+ precfp = None
9231+ if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
9232+ fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
9233+ curloc = fp.tell()
9234+ elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
9235+ fp = infile
92329236 else:
92339237 try:
92349238 if(compresscheck == "gzip" and compresscheck in compressionsupport):
9235- if sys.version_info[0] == 2:
9236- fp = GzipFile(infile, mode="rb" )
9237- else:
9238- fp = gzip.GzipFile(infile, "rb" )
9239+ precfp = open(infile, "rb")
9240+ precfp.seek(filestart, 0 )
9241+ fp = gzip.GzipFile(fileobj=precfp, mode="rb")
9242+ curloc = fp.tell( )
92399243 elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
9240- fp = bz2.BZ2File(infile, "rb")
9244+ precfp = open(infile, "rb")
9245+ precfp.seek(filestart, 0)
9246+ fp = bz2.BZ2File(precfp, "rb")
9247+ curloc = fp.tell()
92419248 elif(compresscheck == "lz4" and compresscheck in compressionsupport):
9242- fp = lz4.frame.open(infile, "rb")
9249+ precfp = open(infile, "rb")
9250+ precfp.seek(filestart, 0)
9251+ fp = lz4.frame.open(precfp, "rb")
9252+ curloc = fp.tell()
92439253 elif(compresscheck == "zstd" and compresscheck in compressionsupport):
9254+ precfp = open(infile, "rb")
9255+ precfp.seek(filestart, 0)
92449256 if 'zstd' in compressionsupport:
9245- fp = zstd.ZstdFile(infile, mode="rb")
9257+ fp = zstd.ZstdFile(precfp, mode="rb")
9258+ curloc = fp.tell()
92469259 else:
92479260 return Flase
92489261 elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
9249- fp = lzma.open(infile, "rb")
9262+ precfp = open(infile, "rb")
9263+ precfp.seek(filestart, 0)
9264+ fp = lzma.open(precfp, "rb")
9265+ curloc = fp.tell()
92509266 elif(compresscheck == "zlib" and compresscheck in compressionsupport):
92519267 fp = ZlibFile(infile, mode="rb")
9268+ fp.seek(filestart, 0)
9269+ curloc = fp.tell()
92529270 else:
92539271 fp = open(infile, "rb")
92549272 except FileNotFoundError:
92559273 return False
92569274 filetype = False
9257- fp.seek(filestart , 0)
9275+ fp.seek(curloc , 0)
92589276 prefp = fp.read(5)
92599277 if(prefp == binascii.unhexlify("7573746172")):
92609278 filetype = "tarfile"
@@ -9283,9 +9301,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92839301 formdelszie = len(formatspecs['format_delimiter'])
92849302 formdel = fp.read(formdelszie).decode("UTF-8")
92859303 if(formstring != inheaderver):
9286- return False
9304+ pass
92879305 if(formdel != formatspecs['format_delimiter']):
9288- return False
9306+ pass
92899307 filetype = formatspecs['format_magic']
92909308 else:
92919309 pass
@@ -9294,6 +9312,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92949312 if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
92959313 filetype = "tarfile"
92969314 fp.seek(curloc, 0)
9315+ if(hasattr(precfp, "read") or hasattr(precfp, "write")):
9316+ precfp.close()
92979317 if(closefp):
92989318 fp.close()
92999319 return filetype
0 commit comments