@@ -4737,11 +4737,11 @@ def ReadFileDataWithContent(fp, filestart=0, listonly=False, uncompress=True, sk
47374737 VerbosePrintOut("'" + fprechecksum + "' != " +
47384738 "'" + newfcs + "'")
47394739 return False
4740- fnumfiles = int(inheader[5 ], 16)
4741- outfseeknextfile = inheaderdata[6 ]
4742- fjsonsize = int(inheaderdata[9 ], 16)
4743- fjsonchecksumtype = inheader[10 ]
4744- fjsonchecksum = inheader[11 ]
4740+ fnumfiles = int(inheader[6 ], 16)
4741+ outfseeknextfile = inheaderdata[7 ]
4742+ fjsonsize = int(inheaderdata[10 ], 16)
4743+ fjsonchecksumtype = inheader[11 ]
4744+ fjsonchecksum = inheader[12 ]
47454745 fp.read(fjsonsize)
47464746 # Next seek directive
47474747 if(re.findall(r"^\+([0-9]+)", outfseeknextfile)):
@@ -4799,10 +4799,10 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47994799 else:
48004800 inheader = ReadFileHeaderDataWoSize(
48014801 fp, formatspecs['format_delimiter'])
4802- fnumextrafieldsize = int(inheader[12 ], 16)
4803- fnumextrafields = int(inheader[13 ], 16)
4802+ fnumextrafieldsize = int(inheader[13 ], 16)
4803+ fnumextrafields = int(inheader[14 ], 16)
48044804 fextrafieldslist = []
4805- extrastart = 14
4805+ extrastart = 15
48064806 extraend = extrastart + fnumextrafields
48074807 while(extrastart < extraend):
48084808 fextrafieldslist.append(inheader[extrastart])
@@ -4822,13 +4822,14 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
48224822 fhencoding = inheader[2]
48234823 fostype = inheader[3]
48244824 fpythontype = inheader[4]
4825- fnumfiles = int(inheader[5], 16)
4826- fseeknextfile = inheader[6]
4827- fjsontype = inheader[7]
4828- fjsonlen = int(inheader[8], 16)
4829- fjsonsize = int(inheader[9], 16)
4830- fjsonchecksumtype = inheader[10]
4831- fjsonchecksum = inheader[11]
4825+ fprojectname = inheader[4]
4826+ fnumfiles = int(inheader[6], 16)
4827+ fseeknextfile = inheader[7]
4828+ fjsontype = inheader[8]
4829+ fjsonlen = int(inheader[9], 16)
4830+ fjsonsize = int(inheader[10], 16)
4831+ fjsonchecksumtype = inheader[11]
4832+ fjsonchecksum = inheader[12]
48324833 fjsoncontent = {}
48334834 fjstart = fp.tell()
48344835 if(fjsontype=="json"):
@@ -4932,7 +4933,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
49324933 return False
49334934 formversions = re.search('(.*?)(\\d+)', formstring).groups()
49344935 fcompresstype = ""
4935- 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': []}
4936+ 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': []}
49364937 if (seekstart < 0) or (seekstart > fnumfiles):
49374938 seekstart = 0
49384939 if (seekend == 0) or (seekend > fnumfiles) or (seekend < seekstart):
@@ -5052,10 +5053,10 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
50525053 else:
50535054 inheader = ReadFileHeaderDataWoSize(
50545055 fp, formatspecs['format_delimiter'])
5055- fnumextrafieldsize = int(inheader[12 ], 16)
5056- fnumextrafields = int(inheader[13 ], 16)
5056+ fnumextrafieldsize = int(inheader[13 ], 16)
5057+ fnumextrafields = int(inheader[14 ], 16)
50575058 fextrafieldslist = []
5058- extrastart = 14
5059+ extrastart = 15
50595060 extraend = extrastart + fnumextrafields
50605061 while(extrastart < extraend):
50615062 fextrafieldslist.append(inheader[extrastart])
@@ -5072,83 +5073,16 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
50725073 formversion = re.findall("([\\d]+)", formstring)
50735074 fheadsize = int(inheader[0], 16)
50745075 fnumfields = int(inheader[1], 16)
5075- fhencoding = inheader[2]
5076- fostype = inheader[3]
5077- fpythontype = inheader[4]
5078- fnumfiles = int(inheader[5], 16)
5079- fseeknextfile = inheaderdata[6]
5080- fjsontype = int(inheader[7], 16)
5081- fjsonlen = int(inheader[8], 16)
5082- fjsonsize = int(inheader[9], 16)
5083- fjsonchecksumtype = inheader[10]
5084- fjsonchecksum = inheader[11]
5076+ fnumfiles = int(inheader[6], 16)
5077+ fseeknextfile = inheaderdata[7]
5078+ fjsontype = int(inheader[8], 16)
5079+ fjsonlen = int(inheader[9], 16)
5080+ fjsonsize = int(inheader[10], 16)
5081+ fjsonchecksumtype = inheader[11]
5082+ fjsonchecksum = inheader[12]
50855083 fjsoncontent = {}
50865084 fjstart = fp.tell()
5087- if(fjsontype=="json"):
5088- fjsoncontent = {}
5089- fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5090- if(fjsonsize > 0):
5091- try:
5092- fjsonrawcontent = base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8")
5093- fjsoncontent = json.loads(base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8"))
5094- except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5095- try:
5096- fjsonrawcontent = fprejsoncontent
5097- fjsoncontent = json.loads(fprejsoncontent)
5098- except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5099- fprejsoncontent = ""
5100- fjsonrawcontent = fprejsoncontent
5101- fjsoncontent = {}
5102- else:
5103- fprejsoncontent = ""
5104- fjsonrawcontent = fprejsoncontent
5105- fjsoncontent = {}
5106- elif(testyaml and fjsontype == "yaml"):
5107- fjsoncontent = {}
5108- fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5109- if (fjsonsize > 0):
5110- try:
5111- # try base64 → utf-8 → YAML
5112- fjsonrawcontent = base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8")
5113- fjsoncontent = yaml.safe_load(fjsonrawcontent) or {}
5114- except (binascii.Error, UnicodeDecodeError, yaml.YAMLError):
5115- try:
5116- # fall back to treating the bytes as plain text YAML
5117- fjsonrawcontent = fprejsoncontent
5118- fjsoncontent = yaml.safe_load(fjsonrawcontent) or {}
5119- except (UnicodeDecodeError, yaml.YAMLError):
5120- # final fallback: empty
5121- fprejsoncontent = ""
5122- fjsonrawcontent = fprejsoncontent
5123- fjsoncontent = {}
5124- else:
5125- fprejsoncontent = ""
5126- fjsonrawcontent = fprejsoncontent
5127- fjsoncontent = {}
5128- elif(not testyaml and fjsontype == "yaml"):
5129- fjsoncontent = {}
5130- fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5131- fprejsoncontent = ""
5132- fjsonrawcontent = fprejsoncontent
5133- elif(fjsontype=="list"):
5134- fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
5135- flisttmp = MkTempFile()
5136- flisttmp.write(fprejsoncontent.encode())
5137- flisttmp.seek(0)
5138- fjsoncontent = ReadFileHeaderData(flisttmp, fjsonlen, delimiter)
5139- flisttmp.close()
5140- fjsonrawcontent = fjsoncontent
5141- if(fjsonlen==1):
5142- try:
5143- fjsonrawcontent = base64.b64decode(fjsoncontent[0]).decode("UTF-8")
5144- fjsoncontent = json.loads(base64.b64decode(fjsoncontent[0]).decode("UTF-8"))
5145- fjsonlen = len(fjsoncontent)
5146- except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5147- try:
5148- fjsonrawcontent = fjsoncontent[0]
5149- fjsoncontent = json.loads(fjsoncontent[0])
5150- except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
5151- pass
5085+ fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
51525086 fjend = fp.tell()
51535087 if(re.findall("^\\+([0-9]+)", fseeknextfile)):
51545088 fseeknextasnum = int(fseeknextfile.replace("+", ""))
@@ -5679,11 +5613,11 @@ def AppendFileHeader(fp, numfiles, fencoding, extradata=[], jsondata={}, checksu
56795613 # Preserve your original "tmpoutlen" computation exactly
56805614 tmpoutlist.append(extrasizelen)
56815615 tmpoutlist.append(extrafields)
5682- tmpoutlen = 7 + len(tmpoutlist) + len(xlist)
5616+ tmpoutlen = 8 + len(tmpoutlist) + len(xlist)
56835617 tmpoutlenhex = _hex_lower(tmpoutlen)
56845618
56855619 # Serialize the first group
5686- fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), py_implementation, fnumfiles_hex, "+"+str(len(formatspecs['format_delimiter']))], delimiter)
5620+ fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), py_implementation, __program_name__, fnumfiles_hex, "+"+str(len(formatspecs['format_delimiter']))], delimiter)
56875621 # Append tmpoutlist
56885622 fnumfilesa += AppendNullBytes(tmpoutlist, delimiter)
56895623 # Append extradata items if any
@@ -9657,23 +9591,20 @@ def FoxFileValidate(infile, fmttype="auto", filestart=0,
96579591 else:
96589592 inheader = ReadFileHeaderDataWoSize(fp, formatspecs['format_delimiter'])
96599593
9660- fnumextrafieldsize = int(inheader[12 ], 16)
9661- fnumextrafields = int(inheader[13 ], 16)
9662- extrastart = 14
9594+ fnumextrafieldsize = int(inheader[13 ], 16)
9595+ fnumextrafields = int(inheader[14 ], 16)
9596+ extrastart = 15
96639597 extraend = extrastart + fnumextrafields
96649598 formversion = re.findall("([\\d]+)", formstring)
96659599 fheadsize = int(inheader[0], 16)
96669600 fnumfields = int(inheader[1], 16)
9667- fhencoding = inheader[2]
9668- fostype = inheader[3]
9669- fpythontype = inheader[4]
9670- fnumfiles = int(inheader[5], 16)
9601+ fnumfiles = int(inheader[6], 16)
96719602 fprechecksumtype = inheader[-2]
96729603 fprechecksum = inheader[-1]
9673- outfseeknextfile = inheader[6 ]
9674- fjsonsize = int(inheader[9 ], 16)
9675- fjsonchecksumtype = inheader[10 ]
9676- fjsonchecksum = inheader[11 ]
9604+ outfseeknextfile = inheader[7 ]
9605+ fjsonsize = int(inheader[10 ], 16)
9606+ fjsonchecksumtype = inheader[11 ]
9607+ fjsonchecksum = inheader[12 ]
96779608 fprejsoncontent = fp.read(fjsonsize)
96789609 jsonfcs = GetFileChecksum(fprejsoncontent, fjsonchecksumtype, True, formatspecs)
96799610 if(fjsonsize > 0):
0 commit comments