Skip to content

Commit 507e256

Browse files
committed
Update pyarchivefile.py
1 parent bb2e24a commit 507e256

1 file changed

Lines changed: 44 additions & 46 deletions

File tree

pyarchivefile.py

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ def check_version_number(myversion=__version__, proname=__program_alt_name__, ne
787787
if(platform.python_implementation() != ""):
788788
py_implementation = platform.python_implementation()
789789
if(platform.python_implementation() == ""):
790-
py_implementation = "Python"
790+
py_implementation = "CPython"
791791
geturls_ua_pyfile_python_alt = "Mozilla/5.0 ({osver}; {archtype}; +{prourl}) {pyimp}/{pyver} (KHTML, like Gecko) {proname}/{prover}".format(osver=platform.system(
792792
)+" "+platform.release(), archtype=platform.machine(), prourl=__project_url__, pyimp=py_implementation, pyver=platform.python_version(), proname=__project__, prover=__version__)
793793
geturls_ua_googlebot_google = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
@@ -3674,7 +3674,7 @@ def GetHeaderChecksum(inlist=None, checksumtype="md5", encodedata=True, formatsp
36743674

36753675
return "0"
36763676

3677-
def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3677+
def GetFileChecksum(inbytes, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
36783678
"""
36793679
Accepts bytes/str/file-like.
36803680
- Hashlib algos: streamed in 1 MiB chunks.
@@ -3684,12 +3684,12 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
36843684
algo_key = (checksumtype or "md5").lower()
36853685

36863686
# file-like streaming
3687-
if hasattr(instr, "read"):
3687+
if hasattr(inbytes, "read"):
36883688
# hashlib
36893689
if CheckSumSupport(algo_key, hashlib_guaranteed):
36903690
h = hashlib.new(algo_key)
36913691
while True:
3692-
chunk = instr.read(1 << 20)
3692+
chunk = inbytes.read(1 << 20)
36933693
if not chunk:
36943694
break
36953695
if not isinstance(chunk, (bytes, bytearray, memoryview)):
@@ -3698,11 +3698,11 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
36983698
return h.hexdigest().lower()
36993699

37003700
# not known streaming algo: fallback to one-shot bytes
3701-
data = instr.read()
3701+
data = inbytes.read()
37023702
if not isinstance(data, (bytes, bytearray, memoryview)):
37033703
data = bytes(bytearray(data))
37043704
else:
3705-
data = _to_bytes(instr) if (encodedata or not isinstance(instr, (bytes, bytearray, memoryview))) else instr
3705+
data = _to_bytes(inbytes) if (encodedata or not isinstance(inbytes, (bytes, bytearray, memoryview))) else inbytes
37063706
data = bytes(data)
37073707

37083708
# one-shot
@@ -3750,7 +3750,7 @@ def GetHeaderChecksum(inlist=None, checksumtype="md5", encodedata=True, formatsp
37503750

37513751
return "0"
37523752

3753-
def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3753+
def GetFileChecksum(inbytes, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
37543754
"""
37553755
Accepts bytes/str/file-like.
37563756
- Hashlib algos: streamed in 1 MiB chunks.
@@ -3760,12 +3760,12 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
37603760
algo_key = (checksumtype or "md5").lower()
37613761

37623762
# file-like streaming
3763-
if hasattr(instr, "read"):
3763+
if hasattr(inbytes, "read"):
37643764
# hashlib
37653765
if CheckSumSupport(algo_key, hashlib_guaranteed):
37663766
h = hashlib.new(algo_key)
37673767
while True:
3768-
chunk = instr.read(1 << 20)
3768+
chunk = inbytes.read(1 << 20)
37693769
if not chunk:
37703770
break
37713771
if not isinstance(chunk, (bytes, bytearray, memoryview)):
@@ -3774,11 +3774,11 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
37743774
return h.hexdigest().lower()
37753775

37763776
# not known streaming algo: fallback to one-shot bytes
3777-
data = instr.read()
3777+
data = inbytes.read()
37783778
if not isinstance(data, (bytes, bytearray, memoryview)):
37793779
data = bytes(bytearray(data))
37803780
else:
3781-
data = _to_bytes(instr) if (encodedata or not isinstance(instr, (bytes, bytearray, memoryview))) else instr
3781+
data = _to_bytes(inbytes) if (encodedata or not isinstance(inbytes, (bytes, bytearray, memoryview))) else inbytes
37823782
data = bytes(data)
37833783

37843784
# one-shot
@@ -3855,12 +3855,12 @@ def GetHeaderChecksum(inlist=[], checksumtype="md5", encodedata=True, formatspec
38553855
return format(0, 'x').lower()
38563856

38573857

3858-
def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3859-
if encodedata and hasattr(instr, "encode"):
3860-
instr = instr.encode('UTF-8')
3858+
def GetFileChecksum(inbytes, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3859+
if encodedata and hasattr(inbytes, "encode"):
3860+
inbytes = inbytes.encode('UTF-8')
38613861
if CheckSumSupport(checksumtype, hashlib_guaranteed):
38623862
checksumoutstr = hashlib.new(checksumtype)
3863-
checksumoutstr.update(instr)
3863+
checksumoutstr.update(inbytes)
38643864
return checksumoutstr.hexdigest().lower()
38653865
return format(0, 'x').lower()
38663866

@@ -4476,7 +4476,7 @@ def ReadFileHeaderDataWithContentToArray(fp, listonly=False, contentasfile=True,
44764476
cfcontents.close()
44774477
fcontents.seek(0, 0)
44784478
fccs = GetFileChecksum(
4479-
fcontents, HeaderOut[-3].lower(), False, formatspecs)
4479+
fcontents.read(), HeaderOut[-3].lower(), False, formatspecs)
44804480
fcontentend = fp.tell()
44814481
if(re.findall("^\\+([0-9]+)", fseeknextfile)):
44824482
fseeknextasnum = int(fseeknextfile.replace("+", ""))
@@ -4694,9 +4694,7 @@ def ReadFileDataWithContent(fp, filestart=0, listonly=False, uncompress=True, sk
46944694
curloc = filestart
46954695
try:
46964696
fp.seek(0, 2)
4697-
except OSError:
4698-
SeekToEndOfFile(fp)
4699-
except ValueError:
4697+
except (OSError, ValueError):
47004698
SeekToEndOfFile(fp)
47014699
CatSize = fp.tell()
47024700
CatSizeEnd = CatSize
@@ -4745,9 +4743,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47454743
curloc = filestart
47464744
try:
47474745
fp.seek(0, 2)
4748-
except OSError:
4749-
SeekToEndOfFile(fp)
4750-
except ValueError:
4746+
except (OSError, ValueError):
47514747
SeekToEndOfFile(fp)
47524748
CatSize = fp.tell()
47534749
CatSizeEnd = CatSize
@@ -4766,8 +4762,8 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47664762
else:
47674763
inheader = ReadFileHeaderDataWoSize(
47684764
fp, formatspecs['format_delimiter'])
4769-
fnumextrafieldsize = int(inheader[5], 16)
4770-
fnumextrafields = int(inheader[6], 16)
4765+
fnumextrafieldsize = int(inheader[6], 16)
4766+
fnumextrafields = int(inheader[7], 16)
47714767
fextrafieldslist = []
47724768
extrastart = 7
47734769
extraend = extrastart + fnumextrafields
@@ -4788,7 +4784,8 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47884784
fnumfields = int(inheader[1], 16)
47894785
fhencoding = inheader[2]
47904786
fostype = inheader[3]
4791-
fnumfiles = int(inheader[4], 16)
4787+
fpythontype = inheader[4]
4788+
fnumfiles = int(inheader[5], 16)
47924789
fprechecksumtype = inheader[-2]
47934790
fprechecksum = inheader[-1]
47944791
headercheck = ValidateHeaderChecksum([formstring] + inheader[:-1], fprechecksumtype, fprechecksum, formatspecs)
@@ -4801,7 +4798,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
48014798
return False
48024799
formversions = re.search('(.*?)(\\d+)', formstring).groups()
48034800
fcompresstype = ""
4804-
outlist = {'fnumfiles': fnumfiles, 'ffilestart': filestart, 'fformat': formversions[0], 'fcompression': fcompresstype, 'fencoding': fhencoding, 'fversion': formversions[1], 'fostype': fostype, 'fheadersize': fheadsize, 'fsize': CatSizeEnd, 'fnumfields': fnumfields + 2, 'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [formstring] + inheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextradata': fextrafieldslist, 'ffilelist': []}
4801+
outlist = {'fnumfiles': fnumfiles, 'ffilestart': filestart, 'fformat': formversions[0], 'fcompression': fcompresstype, 'fencoding': fhencoding, 'fversion': formversions[1], 'fostype': fostype, 'fimptype': fpythontype, 'fheadersize': fheadsize, 'fsize': CatSizeEnd, 'fnumfields': fnumfields + 2, 'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [formstring] + inheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextradata': fextrafieldslist, 'ffilelist': []}
48054802
if (seekstart < 0) or (seekstart > fnumfiles):
48064803
seekstart = 0
48074804
if (seekend == 0) or (seekend > fnumfiles) or (seekend < seekstart):
@@ -4902,7 +4899,7 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
49024899
curloc = filestart
49034900
try:
49044901
fp.seek(0, 2)
4905-
except (ValueError, OSError):
4902+
except (OSError, ValueError):
49064903
SeekToEndOfFile(fp)
49074904
CatSize = fp.tell()
49084905
CatSizeEnd = CatSize
@@ -5059,7 +5056,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50595056
fp = infile
50605057
try:
50615058
fp.seek(0, 2)
5062-
except (ValueError, OSError):
5059+
except (OSError, ValueError):
50635060
SeekToEndOfFile(fp)
50645061
outfsize = fp.tell()
50655062
fp.seek(filestart, 0)
@@ -5069,7 +5066,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50695066
shutil.copyfileobj(PY_STDIN_BUF, fp, length=__filebuff_size__)
50705067
try:
50715068
fp.seek(0, 2)
5072-
except (ValueError, OSError):
5069+
except (OSError, ValueError):
50735070
SeekToEndOfFile(fp)
50745071
outfsize = fp.tell()
50755072
fp.seek(filestart, 0)
@@ -5079,7 +5076,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50795076
fp.write(infile)
50805077
try:
50815078
fp.seek(0, 2)
5082-
except (ValueError, OSError):
5079+
except (OSError, ValueError):
50835080
SeekToEndOfFile(fp)
50845081
outfsize = fp.tell()
50855082
fp.seek(filestart, 0)
@@ -5088,15 +5085,15 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50885085
fp = download_file_from_internet_file(infile)
50895086
try:
50905087
fp.seek(0, 2)
5091-
except (ValueError, OSError):
5088+
except (OSError, ValueError):
50925089
SeekToEndOfFile(fp)
50935090
outfsize = fp.tell()
50945091
fp.seek(filestart, 0)
50955092
currentfilepos = fp.tell()
50965093
elif(isinstance(infile, FileLikeAdapter)):
50975094
try:
50985095
fp.seek(0, 2)
5099-
except (ValueError, OSError):
5096+
except (OSError, ValueError):
51005097
SeekToEndOfFile(fp)
51015098
outfsize = fp.tell()
51025099
fp.seek(filestart, 0)
@@ -5106,7 +5103,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
51065103
fp = open(infile, "rb")
51075104
try:
51085105
fp.seek(0, 2)
5109-
except (ValueError, OSError):
5106+
except (OSError, ValueError):
51105107
SeekToEndOfFile(fp)
51115108
outfsize = fp.tell()
51125109
fp.seek(filestart, 0)
@@ -5157,7 +5154,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
51575154
currentinfilepos = infp.tell()
51585155
try:
51595156
infp.seek(0, 2)
5160-
except (ValueError, OSError):
5157+
except (OSError, ValueError):
51615158
SeekToEndOfFile(infp)
51625159
outinfsize = infp.tell()
51635160
infp.seek(currentinfilepos, 0)
@@ -5196,7 +5193,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
51965193
fp = infile
51975194
try:
51985195
fp.seek(0, 2)
5199-
except (ValueError, OSError):
5196+
except (OSError, ValueError):
52005197
SeekToEndOfFile(fp)
52015198
outfsize = fp.tell()
52025199
fp.seek(filestart, 0)
@@ -5206,7 +5203,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52065203
shutil.copyfileobj(PY_STDIN_BUF, fp, length=__filebuff_size__)
52075204
try:
52085205
fp.seek(0, 2)
5209-
except (ValueError, OSError):
5206+
except (OSError, ValueError):
52105207
SeekToEndOfFile(fp)
52115208
outfsize = fp.tell()
52125209
fp.seek(filestart, 0)
@@ -5216,7 +5213,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52165213
fp.write(infile)
52175214
try:
52185215
fp.seek(0, 2)
5219-
except (ValueError, OSError):
5216+
except (OSError, ValueError):
52205217
SeekToEndOfFile(fp)
52215218
outfsize = fp.tell()
52225219
fp.seek(filestart, 0)
@@ -5225,15 +5222,15 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52255222
fp = download_file_from_internet_file(infile)
52265223
try:
52275224
fp.seek(0, 2)
5228-
except (ValueError, OSError):
5225+
except (OSError, ValueError):
52295226
SeekToEndOfFile(fp)
52305227
outfsize = fp.tell()
52315228
fp.seek(filestart, 0)
52325229
currentfilepos = fp.tell()
52335230
elif(isinstance(infile, FileLikeAdapter)):
52345231
try:
52355232
fp.seek(0, 2)
5236-
except (ValueError, OSError):
5233+
except (OSError, ValueError):
52375234
SeekToEndOfFile(fp)
52385235
outfsize = fp.tell()
52395236
fp.seek(filestart, 0)
@@ -5243,7 +5240,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52435240
fp = open(infile, "rb")
52445241
try:
52455242
fp.seek(0, 2)
5246-
except (ValueError, OSError):
5243+
except (OSError, ValueError):
52475244
SeekToEndOfFile(fp)
52485245
outfsize = fp.tell()
52495246
fp.seek(filestart, 0)
@@ -5294,7 +5291,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52945291
currentinfilepos = infp.tell()
52955292
try:
52965293
infp.seek(0, 2)
5297-
except (ValueError, OSError):
5294+
except (OSError, ValueError):
52985295
SeekToEndOfFile(infp)
52995296
outinfsize = infp.tell()
53005297
infp.seek(currentinfilepos, 0)
@@ -5435,11 +5432,11 @@ def AppendFileHeader(fp,
54355432

54365433
# Preserve your original "tmpoutlen" computation exactly
54375434
tmpoutlist = [extrasizelen, extrafields] # you used this as a separate list
5438-
tmpoutlen = 3 + len(tmpoutlist) + len(xlist) + 2
5435+
tmpoutlen = 4 + len(tmpoutlist) + len(xlist) + 2
54395436
tmpoutlenhex = _hex_lower(tmpoutlen)
54405437

54415438
# Serialize the first group
5442-
fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), fnumfiles_hex], delimiter)
5439+
fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), py_implementation, fnumfiles_hex], delimiter)
54435440
# Append tmpoutlist
54445441
fnumfilesa += AppendNullBytes(tmpoutlist, delimiter)
54455442
# Append extradata items if any
@@ -9412,16 +9409,17 @@ def ArchiveFileValidate(infile, fmttype="auto", filestart=0,
94129409
else:
94139410
inheader = ReadFileHeaderDataWoSize(fp, formatspecs['format_delimiter'])
94149411

9415-
fnumextrafieldsize = int(inheader[5], 16)
9416-
fnumextrafields = int(inheader[6], 16)
9412+
fnumextrafieldsize = int(inheader[6], 16)
9413+
fnumextrafields = int(inheader[7], 16)
94179414
extrastart = 7
94189415
extraend = extrastart + fnumextrafields
94199416
formversion = re.findall("([\\d]+)", formstring)
94209417
fheadsize = int(inheader[0], 16)
94219418
fnumfields = int(inheader[1], 16)
94229419
fhencoding = inheader[2]
94239420
fostype = inheader[3]
9424-
fnumfiles = int(inheader[4], 16)
9421+
fpythontype = inheader[4]
9422+
fnumfiles = int(inheader[5], 16)
94259423
fprechecksumtype = inheader[-2]
94269424
fprechecksum = inheader[-1]
94279425

0 commit comments

Comments
 (0)