Skip to content

Commit 6ca2a0e

Browse files
committed
Small update
1 parent 7d71810 commit 6ca2a0e

2 files changed

Lines changed: 67 additions & 24 deletions

File tree

pyfoxfile.py

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

pyfoxfile_py3.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8505,31 +8505,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85058505
return "rarfile"
85068506
elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
85078507
return "7zipfile"
8508-
if(hasattr(infile, "read") or hasattr(infile, "write")):
8509-
fp = UncompressFileAlt(infile, formatspecs, filestart)
8508+
precfp = None
8509+
if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
8510+
fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
8511+
curloc = fp.tell()
8512+
elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
8513+
fp = infile
85108514
else:
85118515
try:
85128516
if(compresscheck == "gzip" and compresscheck in compressionsupport):
8513-
fp = gzip.GzipFile(infile, "rb")
8517+
precfp = open(infile, "rb")
8518+
precfp.seek(filestart, 0)
8519+
fp = gzip.GzipFile(fileobj=precfp, mode="rb")
8520+
curloc = fp.tell()
85148521
elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
8515-
fp = bz2.BZ2File(infile, "rb")
8522+
precfp = open(infile, "rb")
8523+
precfp.seek(filestart, 0)
8524+
fp = bz2.BZ2File(precfp, "rb")
8525+
curloc = fp.tell()
85168526
elif(compresscheck == "lz4" and compresscheck in compressionsupport):
8517-
fp = lz4.frame.open(infile, "rb")
8527+
precfp = open(infile, "rb")
8528+
precfp.seek(filestart, 0)
8529+
fp = lz4.frame.open(precfp, "rb")
8530+
curloc = fp.tell()
85188531
elif(compresscheck == "zstd" and compresscheck in compressionsupport):
8532+
precfp = open(infile, "rb")
8533+
precfp.seek(filestart, 0)
85198534
if 'zstd' in compressionsupport:
8520-
fp = zstd.ZstdFile(infile, mode="rb")
8535+
fp = zstd.ZstdFile(precfp, mode="rb")
8536+
curloc = fp.tell()
85218537
else:
85228538
return Flase
85238539
elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
8524-
fp = lzma.open(infile, "rb")
8540+
precfp = open(infile, "rb")
8541+
precfp.seek(filestart, 0)
8542+
fp = lzma.open(precfp, "rb")
8543+
curloc = fp.tell()
85258544
elif(compresscheck == "zlib" and compresscheck in compressionsupport):
85268545
fp = ZlibFile(infile, mode="rb")
8546+
fp.seek(filestart, 0)
8547+
curloc = fp.tell()
85278548
else:
85288549
fp = open(infile, "rb")
85298550
except FileNotFoundError:
85308551
return False
85318552
filetype = False
8532-
fp.seek(filestart, 0)
8553+
fp.seek(curloc, 0)
85338554
prefp = fp.read(5)
85348555
if(prefp == binascii.unhexlify("7573746172")):
85358556
filetype = "tarfile"
@@ -8558,9 +8579,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85588579
formdelszie = len(formatspecs['format_delimiter'])
85598580
formdel = fp.read(formdelszie).decode("UTF-8")
85608581
if(formstring != inheaderver):
8561-
return False
8582+
pass
85628583
if(formdel != formatspecs['format_delimiter']):
8563-
return False
8584+
pass
85648585
filetype = formatspecs['format_magic']
85658586
else:
85668587
pass
@@ -8569,6 +8590,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85698590
if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
85708591
filetype = "tarfile"
85718592
fp.seek(curloc, 0)
8593+
if(hasattr(precfp, "read") or hasattr(precfp, "write")):
8594+
precfp.close()
85728595
if(closefp):
85738596
fp.close()
85748597
return filetype

0 commit comments

Comments
 (0)