Skip to content

Commit c9618ed

Browse files
committed
Update pyarchivefile.py
1 parent 48cb2d8 commit c9618ed

File tree

1 file changed

+38
-107
lines changed

1 file changed

+38
-107
lines changed

pyarchivefile.py

Lines changed: 38 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -4729,11 +4729,11 @@ def ReadFileDataWithContent(fp, filestart=0, listonly=False, uncompress=True, sk
47294729
VerbosePrintOut("'" + fprechecksum + "' != " +
47304730
"'" + newfcs + "'")
47314731
return False
4732-
fnumfiles = int(inheader[5], 16)
4733-
outfseeknextfile = inheaderdata[6]
4734-
fjsonsize = int(inheaderdata[9], 16)
4735-
fjsonchecksumtype = inheader[10]
4736-
fjsonchecksum = inheader[11]
4732+
fnumfiles = int(inheader[6], 16)
4733+
outfseeknextfile = inheaderdata[7]
4734+
fjsonsize = int(inheaderdata[10], 16)
4735+
fjsonchecksumtype = inheader[11]
4736+
fjsonchecksum = inheader[12]
47374737
fp.read(fjsonsize)
47384738
# Next seek directive
47394739
if(re.findall(r"^\+([0-9]+)", outfseeknextfile)):
@@ -4791,10 +4791,10 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47914791
else:
47924792
inheader = ReadFileHeaderDataWoSize(
47934793
fp, formatspecs['format_delimiter'])
4794-
fnumextrafieldsize = int(inheader[12], 16)
4795-
fnumextrafields = int(inheader[13], 16)
4794+
fnumextrafieldsize = int(inheader[13], 16)
4795+
fnumextrafields = int(inheader[14], 16)
47964796
fextrafieldslist = []
4797-
extrastart = 14
4797+
extrastart = 15
47984798
extraend = extrastart + fnumextrafields
47994799
while(extrastart < extraend):
48004800
fextrafieldslist.append(inheader[extrastart])
@@ -4814,13 +4814,14 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
48144814
fhencoding = inheader[2]
48154815
fostype = inheader[3]
48164816
fpythontype = inheader[4]
4817-
fnumfiles = int(inheader[5], 16)
4818-
fseeknextfile = inheader[6]
4819-
fjsontype = inheader[7]
4820-
fjsonlen = int(inheader[8], 16)
4821-
fjsonsize = int(inheader[9], 16)
4822-
fjsonchecksumtype = inheader[10]
4823-
fjsonchecksum = inheader[11]
4817+
fprojectname = inheader[4]
4818+
fnumfiles = int(inheader[6], 16)
4819+
fseeknextfile = inheader[7]
4820+
fjsontype = inheader[8]
4821+
fjsonlen = int(inheader[9], 16)
4822+
fjsonsize = int(inheader[10], 16)
4823+
fjsonchecksumtype = inheader[11]
4824+
fjsonchecksum = inheader[12]
48244825
fjsoncontent = {}
48254826
fjstart = fp.tell()
48264827
if(fjsontype=="json"):
@@ -4924,7 +4925,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
49244925
return False
49254926
formversions = re.search('(.*?)(\\d+)', formstring).groups()
49264927
fcompresstype = ""
4927-
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, 'fseeknextfile': fseeknextfile, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'fjsonchecksumtype': fjsonchecksumtype, 'fjsontype': fjsontype, 'fjsonlen': fjsonlen, 'fjsonsize': fjsonsize, 'fjsonrawdata': fjsonrawcontent, 'fjsondata': fjsoncontent, 'fjstart': fjstart, 'fjend': fjend, 'fjsonchecksum': fjsonchecksum, 'frawheader': [formstring] + inheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextradata': fextrafieldslist, 'ffilelist': []}
4928+
outlist = {'fnumfiles': fnumfiles, 'ffilestart': filestart, 'fformat': formversions[0], 'fcompression': fcompresstype, 'fencoding': fhencoding, 'fversion': formversions[1], 'fostype': fostype, 'fprojectname': fprojectname, 'fimptype': fpythontype, 'fheadersize': fheadsize, 'fsize': CatSizeEnd, 'fnumfields': fnumfields + 2, 'fformatspecs': formatspecs, 'fseeknextfile': fseeknextfile, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'fjsonchecksumtype': fjsonchecksumtype, 'fjsontype': fjsontype, 'fjsonlen': fjsonlen, 'fjsonsize': fjsonsize, 'fjsonrawdata': fjsonrawcontent, 'fjsondata': fjsoncontent, 'fjstart': fjstart, 'fjend': fjend, 'fjsonchecksum': fjsonchecksum, 'frawheader': [formstring] + inheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextradata': fextrafieldslist, 'ffilelist': []}
49284929
if (seekstart < 0) or (seekstart > fnumfiles):
49294930
seekstart = 0
49304931
if (seekend == 0) or (seekend > fnumfiles) or (seekend < seekstart):
@@ -5044,10 +5045,10 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
50445045
else:
50455046
inheader = ReadFileHeaderDataWoSize(
50465047
fp, formatspecs['format_delimiter'])
5047-
fnumextrafieldsize = int(inheader[12], 16)
5048-
fnumextrafields = int(inheader[13], 16)
5048+
fnumextrafieldsize = int(inheader[13], 16)
5049+
fnumextrafields = int(inheader[14], 16)
50495050
fextrafieldslist = []
5050-
extrastart = 14
5051+
extrastart = 15
50515052
extraend = extrastart + fnumextrafields
50525053
while(extrastart < extraend):
50535054
fextrafieldslist.append(inheader[extrastart])
@@ -5064,83 +5065,16 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
50645065
formversion = re.findall("([\\d]+)", formstring)
50655066
fheadsize = int(inheader[0], 16)
50665067
fnumfields = int(inheader[1], 16)
5067-
fhencoding = inheader[2]
5068-
fostype = inheader[3]
5069-
fpythontype = inheader[4]
5070-
fnumfiles = int(inheader[5], 16)
5071-
fseeknextfile = inheaderdata[6]
5072-
fjsontype = int(inheader[7], 16)
5073-
fjsonlen = int(inheader[8], 16)
5074-
fjsonsize = int(inheader[9], 16)
5075-
fjsonchecksumtype = inheader[10]
5076-
fjsonchecksum = inheader[11]
5068+
fnumfiles = int(inheader[6], 16)
5069+
fseeknextfile = inheaderdata[7]
5070+
fjsontype = int(inheader[8], 16)
5071+
fjsonlen = int(inheader[9], 16)
5072+
fjsonsize = int(inheader[10], 16)
5073+
fjsonchecksumtype = inheader[11]
5074+
fjsonchecksum = inheader[12]
50775075
fjsoncontent = {}
50785076
fjstart = fp.tell()
5079-
if(fjsontype=="json"):
5080-
fjsoncontent = {}
5081-
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5082-
if(fjsonsize > 0):
5083-
try:
5084-
fjsonrawcontent = base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8")
5085-
fjsoncontent = json.loads(base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8"))
5086-
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5087-
try:
5088-
fjsonrawcontent = fprejsoncontent
5089-
fjsoncontent = json.loads(fprejsoncontent)
5090-
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5091-
fprejsoncontent = ""
5092-
fjsonrawcontent = fprejsoncontent
5093-
fjsoncontent = {}
5094-
else:
5095-
fprejsoncontent = ""
5096-
fjsonrawcontent = fprejsoncontent
5097-
fjsoncontent = {}
5098-
elif(testyaml and fjsontype == "yaml"):
5099-
fjsoncontent = {}
5100-
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5101-
if (fjsonsize > 0):
5102-
try:
5103-
# try base64 → utf-8 → YAML
5104-
fjsonrawcontent = base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8")
5105-
fjsoncontent = yaml.safe_load(fjsonrawcontent) or {}
5106-
except (binascii.Error, UnicodeDecodeError, yaml.YAMLError):
5107-
try:
5108-
# fall back to treating the bytes as plain text YAML
5109-
fjsonrawcontent = fprejsoncontent
5110-
fjsoncontent = yaml.safe_load(fjsonrawcontent) or {}
5111-
except (UnicodeDecodeError, yaml.YAMLError):
5112-
# final fallback: empty
5113-
fprejsoncontent = ""
5114-
fjsonrawcontent = fprejsoncontent
5115-
fjsoncontent = {}
5116-
else:
5117-
fprejsoncontent = ""
5118-
fjsonrawcontent = fprejsoncontent
5119-
fjsoncontent = {}
5120-
elif(not testyaml and fjsontype == "yaml"):
5121-
fjsoncontent = {}
5122-
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5123-
fprejsoncontent = ""
5124-
fjsonrawcontent = fprejsoncontent
5125-
elif(fjsontype=="list"):
5126-
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5127-
flisttmp = MkTempFile()
5128-
flisttmp.write(fprejsoncontent.encode())
5129-
flisttmp.seek(0)
5130-
fjsoncontent = ReadFileHeaderData(flisttmp, fjsonlen, delimiter)
5131-
flisttmp.close()
5132-
fjsonrawcontent = fjsoncontent
5133-
if(fjsonlen==1):
5134-
try:
5135-
fjsonrawcontent = base64.b64decode(fjsoncontent[0]).decode("UTF-8")
5136-
fjsoncontent = json.loads(base64.b64decode(fjsoncontent[0]).decode("UTF-8"))
5137-
fjsonlen = len(fjsoncontent)
5138-
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5139-
try:
5140-
fjsonrawcontent = fjsoncontent[0]
5141-
fjsoncontent = json.loads(fjsoncontent[0])
5142-
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5143-
pass
5077+
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
51445078
fjend = fp.tell()
51455079
if(re.findall("^\\+([0-9]+)", fseeknextfile)):
51465080
fseeknextasnum = int(fseeknextfile.replace("+", ""))
@@ -5671,11 +5605,11 @@ def AppendFileHeader(fp, numfiles, fencoding, extradata=[], jsondata={}, checksu
56715605
# Preserve your original "tmpoutlen" computation exactly
56725606
tmpoutlist.append(extrasizelen)
56735607
tmpoutlist.append(extrafields)
5674-
tmpoutlen = 7 + len(tmpoutlist) + len(xlist)
5608+
tmpoutlen = 8 + len(tmpoutlist) + len(xlist)
56755609
tmpoutlenhex = _hex_lower(tmpoutlen)
56765610

56775611
# Serialize the first group
5678-
fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), py_implementation, fnumfiles_hex, "+"+str(len(formatspecs['format_delimiter']))], delimiter)
5612+
fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), py_implementation, __program_name__, fnumfiles_hex, "+"+str(len(formatspecs['format_delimiter']))], delimiter)
56795613
# Append tmpoutlist
56805614
fnumfilesa += AppendNullBytes(tmpoutlist, delimiter)
56815615
# Append extradata items if any
@@ -9649,23 +9583,20 @@ def ArchiveFileValidate(infile, fmttype="auto", filestart=0,
96499583
else:
96509584
inheader = ReadFileHeaderDataWoSize(fp, formatspecs['format_delimiter'])
96519585

9652-
fnumextrafieldsize = int(inheader[12], 16)
9653-
fnumextrafields = int(inheader[13], 16)
9654-
extrastart = 14
9586+
fnumextrafieldsize = int(inheader[13], 16)
9587+
fnumextrafields = int(inheader[14], 16)
9588+
extrastart = 15
96559589
extraend = extrastart + fnumextrafields
96569590
formversion = re.findall("([\\d]+)", formstring)
96579591
fheadsize = int(inheader[0], 16)
96589592
fnumfields = int(inheader[1], 16)
9659-
fhencoding = inheader[2]
9660-
fostype = inheader[3]
9661-
fpythontype = inheader[4]
9662-
fnumfiles = int(inheader[5], 16)
9593+
fnumfiles = int(inheader[6], 16)
96639594
fprechecksumtype = inheader[-2]
96649595
fprechecksum = inheader[-1]
9665-
outfseeknextfile = inheader[6]
9666-
fjsonsize = int(inheader[9], 16)
9667-
fjsonchecksumtype = inheader[10]
9668-
fjsonchecksum = inheader[11]
9596+
outfseeknextfile = inheader[7]
9597+
fjsonsize = int(inheader[10], 16)
9598+
fjsonchecksumtype = inheader[11]
9599+
fjsonchecksum = inheader[12]
96699600
fprejsoncontent = fp.read(fjsonsize)
96709601
jsonfcs = GetFileChecksum(fprejsoncontent, fjsonchecksumtype, True, formatspecs)
96719602
if(fjsonsize > 0):

0 commit comments

Comments
 (0)