Skip to content

Commit f4d6ba2

Browse files
committed
Small update
1 parent f823653 commit f4d6ba2

2 files changed

Lines changed: 67 additions & 24 deletions

File tree

pycatfile.py

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9188,7 +9188,7 @@ def CheckCompressionType(infile, formatspecs=__file_format_multi_dict__, filesta
91889188
def 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

pycatfile_py3.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8504,31 +8504,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85048504
return "rarfile"
85058505
elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
85068506
return "7zipfile"
8507-
if(hasattr(infile, "read") or hasattr(infile, "write")):
8508-
fp = UncompressFileAlt(infile, formatspecs, filestart)
8507+
precfp = None
8508+
if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
8509+
fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
8510+
curloc = fp.tell()
8511+
elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
8512+
fp = infile
85098513
else:
85108514
try:
85118515
if(compresscheck == "gzip" and compresscheck in compressionsupport):
8512-
fp = gzip.GzipFile(infile, "rb")
8516+
precfp = open(infile, "rb")
8517+
precfp.seek(filestart, 0)
8518+
fp = gzip.GzipFile(fileobj=precfp, mode="rb")
8519+
curloc = fp.tell()
85138520
elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
8514-
fp = bz2.BZ2File(infile, "rb")
8521+
precfp = open(infile, "rb")
8522+
precfp.seek(filestart, 0)
8523+
fp = bz2.BZ2File(precfp, "rb")
8524+
curloc = fp.tell()
85158525
elif(compresscheck == "lz4" and compresscheck in compressionsupport):
8516-
fp = lz4.frame.open(infile, "rb")
8526+
precfp = open(infile, "rb")
8527+
precfp.seek(filestart, 0)
8528+
fp = lz4.frame.open(precfp, "rb")
8529+
curloc = fp.tell()
85178530
elif(compresscheck == "zstd" and compresscheck in compressionsupport):
8531+
precfp = open(infile, "rb")
8532+
precfp.seek(filestart, 0)
85188533
if 'zstd' in compressionsupport:
8519-
fp = zstd.ZstdFile(infile, mode="rb")
8534+
fp = zstd.ZstdFile(precfp, mode="rb")
8535+
curloc = fp.tell()
85208536
else:
85218537
return Flase
85228538
elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
8523-
fp = lzma.open(infile, "rb")
8539+
precfp = open(infile, "rb")
8540+
precfp.seek(filestart, 0)
8541+
fp = lzma.open(precfp, "rb")
8542+
curloc = fp.tell()
85248543
elif(compresscheck == "zlib" and compresscheck in compressionsupport):
85258544
fp = ZlibFile(infile, mode="rb")
8545+
fp.seek(filestart, 0)
8546+
curloc = fp.tell()
85268547
else:
85278548
fp = open(infile, "rb")
85288549
except FileNotFoundError:
85298550
return False
85308551
filetype = False
8531-
fp.seek(filestart, 0)
8552+
fp.seek(curloc, 0)
85328553
prefp = fp.read(5)
85338554
if(prefp == binascii.unhexlify("7573746172")):
85348555
filetype = "tarfile"
@@ -8557,9 +8578,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85578578
formdelszie = len(formatspecs['format_delimiter'])
85588579
formdel = fp.read(formdelszie).decode("UTF-8")
85598580
if(formstring != inheaderver):
8560-
return False
8581+
pass
85618582
if(formdel != formatspecs['format_delimiter']):
8562-
return False
8583+
pass
85638584
filetype = formatspecs['format_magic']
85648585
else:
85658586
pass
@@ -8568,6 +8589,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85688589
if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
85698590
filetype = "tarfile"
85708591
fp.seek(curloc, 0)
8592+
if(hasattr(precfp, "read") or hasattr(precfp, "write")):
8593+
precfp.close()
85718594
if(closefp):
85728595
fp.close()
85738596
return filetype

0 commit comments

Comments
 (0)