@@ -9194,7 +9194,7 @@ def CheckCompressionType(infile, formatspecs=__file_format_multi_dict__, filesta
91949194def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, filestart=0, closefp=True):
91959195 compresscheck = CheckCompressionType(infile, formatspecs, filestart, False)
91969196 curloc = filestart
9197- if(not compresscheck and not hasattr (infile, "read" )):
9197+ if(not compresscheck and isinstance (infile, (str, bytes, os.PathLike) )):
91989198 fextname = os.path.splitext(infile)[1]
91999199 if(fextname == ".gz"):
92009200 compresscheck = "gzip"
@@ -9239,34 +9239,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92399239 return "rarfile"
92409240 elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
92419241 return "7zipfile"
9242- if(hasattr(infile, "read") or hasattr(infile, "write")):
9243- fp = UncompressFileAlt(infile, formatspecs, filestart)
9242+ precfp = None
9243+ if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
9244+ fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
9245+ curloc = fp.tell()
9246+ elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
9247+ fp = infile
92449248 else:
92459249 try:
92469250 if(compresscheck == "gzip" and compresscheck in compressionsupport):
9247- if sys.version_info[0] == 2:
9248- fp = GzipFile(infile, mode="rb" )
9249- else:
9250- fp = gzip.GzipFile(infile, "rb" )
9251+ precfp = open(infile, "rb")
9252+ precfp.seek(filestart, 0 )
9253+ fp = gzip.GzipFile(fileobj=precfp, mode="rb")
9254+ curloc = fp.tell( )
92519255 elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
9252- fp = bz2.BZ2File(infile, "rb")
9256+ precfp = open(infile, "rb")
9257+ precfp.seek(filestart, 0)
9258+ fp = bz2.BZ2File(precfp, "rb")
9259+ curloc = fp.tell()
92539260 elif(compresscheck == "lz4" and compresscheck in compressionsupport):
9254- fp = lz4.frame.open(infile, "rb")
9261+ precfp = open(infile, "rb")
9262+ precfp.seek(filestart, 0)
9263+ fp = lz4.frame.open(precfp, "rb")
9264+ curloc = fp.tell()
92559265 elif(compresscheck == "zstd" and compresscheck in compressionsupport):
9266+ precfp = open(infile, "rb")
9267+ precfp.seek(filestart, 0)
92569268 if 'zstd' in compressionsupport:
9257- fp = zstd.ZstdFile(infile, mode="rb")
9269+ fp = zstd.ZstdFile(precfp, mode="rb")
9270+ curloc = fp.tell()
92589271 else:
92599272 return Flase
92609273 elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
9261- fp = lzma.open(infile, "rb")
9274+ precfp = open(infile, "rb")
9275+ precfp.seek(filestart, 0)
9276+ fp = lzma.open(precfp, "rb")
9277+ curloc = fp.tell()
92629278 elif(compresscheck == "zlib" and compresscheck in compressionsupport):
92639279 fp = ZlibFile(infile, mode="rb")
9280+ fp.seek(filestart, 0)
9281+ curloc = fp.tell()
92649282 else:
92659283 fp = open(infile, "rb")
92669284 except FileNotFoundError:
92679285 return False
92689286 filetype = False
9269- fp.seek(filestart , 0)
9287+ fp.seek(curloc , 0)
92709288 prefp = fp.read(5)
92719289 if(prefp == binascii.unhexlify("7573746172")):
92729290 filetype = "tarfile"
@@ -9295,9 +9313,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92959313 formdelszie = len(formatspecs['format_delimiter'])
92969314 formdel = fp.read(formdelszie).decode("UTF-8")
92979315 if(formstring != inheaderver):
9298- return False
9316+ pass
92999317 if(formdel != formatspecs['format_delimiter']):
9300- return False
9318+ pass
93019319 filetype = formatspecs['format_magic']
93029320 else:
93039321 pass
@@ -9306,6 +9324,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
93069324 if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
93079325 filetype = "tarfile"
93089326 fp.seek(curloc, 0)
9327+ if(hasattr(precfp, "read") or hasattr(precfp, "write")):
9328+ precfp.close()
93099329 if(closefp):
93109330 fp.close()
93119331 return filetype
0 commit comments