@@ -9188,7 +9188,7 @@ def CheckCompressionType(infile, formatspecs=__file_format_multi_dict__, filesta
91889188def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, filestart=0, closefp=True):
91899189 compresscheck = CheckCompressionType(infile, formatspecs, filestart, False)
91909190 curloc = filestart
9191- if(not compresscheck and not hasattr (infile, "read" )):
9191+ if(not compresscheck and isinstance (infile, (str, bytes, os.PathLike) )):
91929192 fextname = os.path.splitext(infile)[1]
91939193 if(fextname == ".gz"):
91949194 compresscheck = "gzip"
@@ -9233,34 +9233,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92339233 return "rarfile"
92349234 elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
92359235 return "7zipfile"
9236- if(hasattr(infile, "read") or hasattr(infile, "write")):
9237- fp = UncompressFileAlt(infile, formatspecs, filestart)
9236+ precfp = None
9237+ if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
9238+ fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
9239+ curloc = fp.tell()
9240+ elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
9241+ fp = infile
92389242 else:
92399243 try:
92409244 if(compresscheck == "gzip" and compresscheck in compressionsupport):
9241- if sys.version_info[0] == 2:
9242- fp = GzipFile(infile, mode="rb" )
9243- else:
9244- fp = gzip.GzipFile(infile, "rb" )
9245+ precfp = open(infile, "rb")
9246+ precfp.seek(filestart, 0 )
9247+ fp = gzip.GzipFile(fileobj=precfp, mode="rb")
9248+ curloc = fp.tell( )
92459249 elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
9246- fp = bz2.BZ2File(infile, "rb")
9250+ precfp = open(infile, "rb")
9251+ precfp.seek(filestart, 0)
9252+ fp = bz2.BZ2File(precfp, "rb")
9253+ curloc = fp.tell()
92479254 elif(compresscheck == "lz4" and compresscheck in compressionsupport):
9248- fp = lz4.frame.open(infile, "rb")
9255+ precfp = open(infile, "rb")
9256+ precfp.seek(filestart, 0)
9257+ fp = lz4.frame.open(precfp, "rb")
9258+ curloc = fp.tell()
92499259 elif(compresscheck == "zstd" and compresscheck in compressionsupport):
9260+ precfp = open(infile, "rb")
9261+ precfp.seek(filestart, 0)
92509262 if 'zstd' in compressionsupport:
9251- fp = zstd.ZstdFile(infile, mode="rb")
9263+ fp = zstd.ZstdFile(precfp, mode="rb")
9264+ curloc = fp.tell()
92529265 else:
92539266 return Flase
92549267 elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
9255- fp = lzma.open(infile, "rb")
9268+ precfp = open(infile, "rb")
9269+ precfp.seek(filestart, 0)
9270+ fp = lzma.open(precfp, "rb")
9271+ curloc = fp.tell()
92569272 elif(compresscheck == "zlib" and compresscheck in compressionsupport):
92579273 fp = ZlibFile(infile, mode="rb")
9274+ fp.seek(filestart, 0)
9275+ curloc = fp.tell()
92589276 else:
92599277 fp = open(infile, "rb")
92609278 except FileNotFoundError:
92619279 return False
92629280 filetype = False
9263- fp.seek(filestart , 0)
9281+ fp.seek(curloc , 0)
92649282 prefp = fp.read(5)
92659283 if(prefp == binascii.unhexlify("7573746172")):
92669284 filetype = "tarfile"
@@ -9289,9 +9307,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92899307 formdelszie = len(formatspecs['format_delimiter'])
92909308 formdel = fp.read(formdelszie).decode("UTF-8")
92919309 if(formstring != inheaderver):
9292- return False
9310+ pass
92939311 if(formdel != formatspecs['format_delimiter']):
9294- return False
9312+ pass
92959313 filetype = formatspecs['format_magic']
92969314 else:
92979315 pass
@@ -9300,6 +9318,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
93009318 if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
93019319 filetype = "tarfile"
93029320 fp.seek(curloc, 0)
9321+ if(hasattr(precfp, "read") or hasattr(precfp, "write")):
9322+ precfp.close()
93039323 if(closefp):
93049324 fp.close()
93059325 return filetype
0 commit comments