@@ -9189,7 +9189,7 @@ def CheckCompressionType(infile, formatspecs=__file_format_multi_dict__, filesta
91899189def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, filestart=0, closefp=True):
91909190 compresscheck = CheckCompressionType(infile, formatspecs, filestart, False)
91919191 curloc = filestart
9192- if(not compresscheck and not hasattr (infile, "read" )):
9192+ if(not compresscheck and isinstance (infile, (str, bytes, os.PathLike) )):
91939193 fextname = os.path.splitext(infile)[1]
91949194 if(fextname == ".gz"):
91959195 compresscheck = "gzip"
@@ -9234,34 +9234,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92349234 return "rarfile"
92359235 elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
92369236 return "7zipfile"
9237- if(hasattr(infile, "read") or hasattr(infile, "write")):
9238- fp = UncompressFileAlt(infile, formatspecs, filestart)
9237+ precfp = None
9238+ if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
9239+ fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
9240+ curloc = fp.tell()
9241+ elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
9242+ fp = infile
92399243 else:
92409244 try:
92419245 if(compresscheck == "gzip" and compresscheck in compressionsupport):
9242- if sys.version_info[0] == 2:
9243- fp = GzipFile(infile, mode="rb" )
9244- else:
9245- fp = gzip.GzipFile(infile, "rb" )
9246+ precfp = open(infile, "rb")
9247+ precfp.seek(filestart, 0 )
9248+ fp = gzip.GzipFile(fileobj=precfp, mode="rb")
9249+ curloc = fp.tell( )
92469250 elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
9247- fp = bz2.BZ2File(infile, "rb")
9251+ precfp = open(infile, "rb")
9252+ precfp.seek(filestart, 0)
9253+ fp = bz2.BZ2File(precfp, "rb")
9254+ curloc = fp.tell()
92489255 elif(compresscheck == "lz4" and compresscheck in compressionsupport):
9249- fp = lz4.frame.open(infile, "rb")
9256+ precfp = open(infile, "rb")
9257+ precfp.seek(filestart, 0)
9258+ fp = lz4.frame.open(precfp, "rb")
9259+ curloc = fp.tell()
92509260 elif(compresscheck == "zstd" and compresscheck in compressionsupport):
9261+ precfp = open(infile, "rb")
9262+ precfp.seek(filestart, 0)
92519263 if 'zstd' in compressionsupport:
9252- fp = zstd.ZstdFile(infile, mode="rb")
9264+ fp = zstd.ZstdFile(precfp, mode="rb")
9265+ curloc = fp.tell()
92539266 else:
92549267 return Flase
92559268 elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
9256- fp = lzma.open(infile, "rb")
9269+ precfp = open(infile, "rb")
9270+ precfp.seek(filestart, 0)
9271+ fp = lzma.open(precfp, "rb")
9272+ curloc = fp.tell()
92579273 elif(compresscheck == "zlib" and compresscheck in compressionsupport):
92589274 fp = ZlibFile(infile, mode="rb")
9275+ fp.seek(filestart, 0)
9276+ curloc = fp.tell()
92599277 else:
92609278 fp = open(infile, "rb")
92619279 except FileNotFoundError:
92629280 return False
92639281 filetype = False
9264- fp.seek(filestart , 0)
9282+ fp.seek(curloc , 0)
92659283 prefp = fp.read(5)
92669284 if(prefp == binascii.unhexlify("7573746172")):
92679285 filetype = "tarfile"
@@ -9290,9 +9308,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
92909308 formdelszie = len(formatspecs['format_delimiter'])
92919309 formdel = fp.read(formdelszie).decode("UTF-8")
92929310 if(formstring != inheaderver):
9293- return False
9311+ pass
92949312 if(formdel != formatspecs['format_delimiter']):
9295- return False
9313+ pass
92969314 filetype = formatspecs['format_magic']
92979315 else:
92989316 pass
@@ -9301,6 +9319,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
93019319 if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
93029320 filetype = "tarfile"
93039321 fp.seek(curloc, 0)
9322+ if(hasattr(precfp, "read") or hasattr(precfp, "write")):
9323+ precfp.close()
93049324 if(closefp):
93059325 fp.close()
93069326 return filetype
0 commit comments