Skip to content

Commit 7a214df

Browse files
committed
Update pyfoxfile.py
1 parent 86a07ae commit 7a214df

1 file changed

Lines changed: 38 additions & 107 deletions

File tree

pyfoxfile.py

Lines changed: 38 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)