@@ -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