@@ -4239,19 +4239,44 @@ def ReadFileHeaderDataWithContent(fp, listonly=False, uncompress=True, skipcheck
42394239 fjsonchecksumtype = HeaderOut[30]
42404240 fjsonchecksum = HeaderOut[31]
42414241 fjsoncontent = {}
4242- fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
4243- if(fjsonsize > 0):
4244- try:
4245- fjsoncontent = json.loads(base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8"))
4246- except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
4242+ if(fjsontype=="json"):
4243+ fjsoncontent = {}
4244+ fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
4245+ if(fjsonsize > 0):
42474246 try:
4248- fjsoncontent = json.loads(fprejsoncontent)
4247+ fjsonrawcontent = base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8")
4248+ fjsoncontent = json.loads(base64.b64decode(fprejsoncontent.encode("UTF-8")).decode("UTF-8"))
42494249 except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
4250- fprejsoncontent = ""
4251- fjsoncontent = {}
4252- else:
4253- fprejsoncontent = ""
4254- fjsoncontent = {}
4250+ try:
4251+ fjsonrawcontent = fprejsoncontent
4252+ fjsoncontent = json.loads(fprejsoncontent)
4253+ except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
4254+ fprejsoncontent = ""
4255+ fjsonrawcontent = fprejsoncontent
4256+ fjsoncontent = {}
4257+ else:
4258+ fprejsoncontent = ""
4259+ fjsonrawcontent = fprejsoncontent
4260+ fjsoncontent = {}
4261+ elif(fjsontype=="list"):
4262+ fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
4263+ flisttmp = MkTempFile()
4264+ flisttmp.write(fprejsoncontent.encode())
4265+ flisttmp.seek(0)
4266+ fjsoncontent = ReadFileHeaderData(flisttmp, fjsonlen, delimiter)
4267+ flisttmp.close()
4268+ fjsonrawcontent = fjsoncontent
4269+ if(fjsonlen==1):
4270+ try:
4271+ fjsonrawcontent = base64.b64decode(fjsoncontent[0]).decode("UTF-8")
4272+ fjsoncontent = json.loads(base64.b64decode(fjsoncontent[0]).decode("UTF-8"))
4273+ fjsonlen = len(fjsoncontent)
4274+ except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
4275+ try:
4276+ fjsonrawcontent = fjsoncontent[0]
4277+ fjsoncontent = json.loads(fjsoncontent[0])
4278+ except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
4279+ pass
42554280 fp.seek(len(delimiter), 1)
42564281 jsonfcs = GetFileChecksum(fprejsoncontent, fjsonchecksumtype, True, formatspecs)
42574282 if(jsonfcs != fjsonchecksum and not skipchecksum):
@@ -4772,7 +4797,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47724797 fnumextrafieldsize = int(inheader[6], 16)
47734798 fnumextrafields = int(inheader[7], 16)
47744799 fextrafieldslist = []
4775- extrastart = 7
4800+ extrastart = 8
47764801 extraend = extrastart + fnumextrafields
47774802 while(extrastart < extraend):
47784803 fextrafieldslist.append(inheader[extrastart])
@@ -4925,10 +4950,10 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
49254950 else:
49264951 inheader = ReadFileHeaderDataWoSize(
49274952 fp, formatspecs['format_delimiter'])
4928- fnumextrafieldsize = int(inheader[5 ], 16)
4929- fnumextrafields = int(inheader[6 ], 16)
4953+ fnumextrafieldsize = int(inheader[6 ], 16)
4954+ fnumextrafields = int(inheader[7 ], 16)
49304955 fextrafieldslist = []
4931- extrastart = 7
4956+ extrastart = 8
49324957 extraend = extrastart + fnumextrafields
49334958 while(extrastart < extraend):
49344959 fextrafieldslist.append(inheader[extrastart])
@@ -4947,7 +4972,8 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
49474972 fnumfields = int(inheader[1], 16)
49484973 fhencoding = inheader[2]
49494974 fostype = inheader[3]
4950- fnumfiles = int(inheader[4], 16)
4975+ fpythontype = inheader[4]
4976+ fnumfiles = int(inheader[5], 16)
49514977 fprechecksumtype = inheader[-2]
49524978 fprechecksum = inheader[-1]
49534979 headercheck = ValidateHeaderChecksum([formstring] + inheader[:-1], fprechecksumtype, fprechecksum, formatspecs)
@@ -9418,7 +9444,7 @@ def CatFileValidate(infile, fmttype="auto", filestart=0,
94189444
94199445 fnumextrafieldsize = int(inheader[6], 16)
94209446 fnumextrafields = int(inheader[7], 16)
9421- extrastart = 7
9447+ extrastart = 8
94229448 extraend = extrastart + fnumextrafields
94239449 formversion = re.findall("([\\d]+)", formstring)
94249450 fheadsize = int(inheader[0], 16)
0 commit comments