Skip to content

Commit 3db4fd1

Browse files
committed
Update pycatfile.py
1 parent d764c88 commit 3db4fd1

1 file changed

Lines changed: 43 additions & 17 deletions

File tree

pycatfile.py

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

Comments
 (0)