Skip to content

Commit 530ee04

Browse files
committed
Small update
1 parent fcabd6c commit 530ee04

2 files changed

Lines changed: 67 additions & 24 deletions

File tree

pyarchivefile.py

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

pyarchivefile_py3.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8498,31 +8498,52 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
84988498
return "rarfile"
84998499
elif(py7zr_support and compresscheck == "7zipfile" and py7zr.is_7zfile(infile)):
85008500
return "7zipfile"
8501-
if(hasattr(infile, "read") or hasattr(infile, "write")):
8502-
fp = UncompressFileAlt(infile, formatspecs, filestart)
8501+
precfp = None
8502+
if(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck in compressionsupport):
8503+
fp = UncompressFileAlt(infile, formatspecs, filestart, reuse_adapter=False)
8504+
curloc = fp.tell()
8505+
elif(hasattr(infile, "read") or hasattr(infile, "write") and compresscheck not in compressionsupport):
8506+
fp = infile
85038507
else:
85048508
try:
85058509
if(compresscheck == "gzip" and compresscheck in compressionsupport):
8506-
fp = gzip.GzipFile(infile, "rb")
8510+
precfp = open(infile, "rb")
8511+
precfp.seek(filestart, 0)
8512+
fp = gzip.GzipFile(fileobj=precfp, mode="rb")
8513+
curloc = fp.tell()
85078514
elif(compresscheck == "bzip2" and compresscheck in compressionsupport):
8508-
fp = bz2.BZ2File(infile, "rb")
8515+
precfp = open(infile, "rb")
8516+
precfp.seek(filestart, 0)
8517+
fp = bz2.BZ2File(precfp, "rb")
8518+
curloc = fp.tell()
85098519
elif(compresscheck == "lz4" and compresscheck in compressionsupport):
8510-
fp = lz4.frame.open(infile, "rb")
8520+
precfp = open(infile, "rb")
8521+
precfp.seek(filestart, 0)
8522+
fp = lz4.frame.open(precfp, "rb")
8523+
curloc = fp.tell()
85118524
elif(compresscheck == "zstd" and compresscheck in compressionsupport):
8525+
precfp = open(infile, "rb")
8526+
precfp.seek(filestart, 0)
85128527
if 'zstd' in compressionsupport:
8513-
fp = zstd.ZstdFile(infile, mode="rb")
8528+
fp = zstd.ZstdFile(precfp, mode="rb")
8529+
curloc = fp.tell()
85148530
else:
85158531
return Flase
85168532
elif((compresscheck == "lzma" or compresscheck == "xz") and compresscheck in compressionsupport):
8517-
fp = lzma.open(infile, "rb")
8533+
precfp = open(infile, "rb")
8534+
precfp.seek(filestart, 0)
8535+
fp = lzma.open(precfp, "rb")
8536+
curloc = fp.tell()
85188537
elif(compresscheck == "zlib" and compresscheck in compressionsupport):
85198538
fp = ZlibFile(infile, mode="rb")
8539+
fp.seek(filestart, 0)
8540+
curloc = fp.tell()
85208541
else:
85218542
fp = open(infile, "rb")
85228543
except FileNotFoundError:
85238544
return False
85248545
filetype = False
8525-
fp.seek(filestart, 0)
8546+
fp.seek(curloc, 0)
85268547
prefp = fp.read(5)
85278548
if(prefp == binascii.unhexlify("7573746172")):
85288549
filetype = "tarfile"
@@ -8551,9 +8572,9 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85518572
formdelszie = len(formatspecs['format_delimiter'])
85528573
formdel = fp.read(formdelszie).decode("UTF-8")
85538574
if(formstring != inheaderver):
8554-
return False
8575+
pass
85558576
if(formdel != formatspecs['format_delimiter']):
8556-
return False
8577+
pass
85578578
filetype = formatspecs['format_magic']
85588579
else:
85598580
pass
@@ -8562,6 +8583,8 @@ def CheckCompressionSubType(infile, formatspecs=__file_format_multi_dict__, file
85628583
if(prefp == binascii.unhexlify("7061785f676c6f62616c")):
85638584
filetype = "tarfile"
85648585
fp.seek(curloc, 0)
8586+
if(hasattr(precfp, "read") or hasattr(precfp, "write")):
8587+
precfp.close()
85658588
if(closefp):
85668589
fp.close()
85678590
return filetype

0 commit comments

Comments
 (0)