Skip to content

Commit 059c4cf

Browse files
author
Kazuki Suzuki Przyborowski
committed
Update pycatfile.py
1 parent 212514a commit 059c4cf

1 file changed

Lines changed: 64 additions & 17 deletions

File tree

pycatfile.py

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2389,7 +2389,7 @@ def ReadFileHeaderDataWithContentToList(fp, listonly=False, contentasfile=False,
23892389
pass
23902390
fjsoncontent = {}
23912391
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
2392-
if(len(fjsoncontent) > 0):
2392+
if(fjsonsize > 0):
23932393
try:
23942394
fjsoncontent = json.loads(base64.b64decode(fprejsoncontent).decode("UTF-8"))
23952395
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
@@ -6971,14 +6971,23 @@ def CatFileSeekToFileName(infile, fmttype="auto", seekfile=None, listonly=False,
69716971
prefdev_minor = int(preheaderdata[24], 16)
69726972
prefdev_major = int(preheaderdata[25], 16)
69736973
prefseeknextfile = preheaderdata[26]
6974-
prefextrasize = int(preheaderdata[27], 16)
6975-
prefextrafields = int(preheaderdata[28], 16)
6976-
extrastart = 29
6974+
prefsize = int(preheaderdata[7], 16)
6975+
prefcompression = preheaderdata[14]
6976+
prefcsize = int(preheaderdata[15], 16)
6977+
prefseeknextfile = preheaderdata[26]
6978+
prefjsonsize = int(HeaderOut[27], 16)
6979+
prefjoutfprejsoncontent = fp.read(prefjsonsize).decode("UTF-8")
6980+
if(prefjsonsize <= 0):
6981+
prefjoutfprejsoncontent = "".encode()
6982+
fp.seek(len(formatspecs['format_delimiter']), 1)
6983+
prefextrasize = int(preheaderdata[28], 16)
6984+
prefextrafields = int(preheaderdata[29], 16)
6985+
extrastart = 30
69776986
extraend = extrastart + prefextrafields
69786987
prefcs = preheaderdata[-2].lower()
69796988
prenewfcs = preheaderdata[-1].lower()
69806989
prenewfcs = GetHeaderChecksum(
6981-
preheaderdata[:-2], preheaderdata[-4].lower(), True, formatspecs)
6990+
preheaderdata[:-2] + [prefjoutfprejsoncontent], preheaderdata[-4].lower(), True, formatspecs)
69826991
if(prefcs != prenewfcs and not skipchecksum):
69836992
VerbosePrintOut("File Header Checksum Error with file " +
69846993
prefname + " at offset " + str(prefhstart))
@@ -7278,14 +7287,31 @@ def CatFileValidate(infile, fmttype="auto", formatspecs=__file_format_multi_dict
72787287
outfdev_minor = int(inheaderdata[24], 16)
72797288
outfdev_major = int(inheaderdata[25], 16)
72807289
outfseeknextfile = inheaderdata[26]
7281-
outfextrasize = int(inheaderdata[27], 16)
7282-
outfextrafields = int(inheaderdata[28], 16)
7283-
extrastart = 29
7290+
outfjsonsize = int(inheaderdata[27], 16)
7291+
outfjsoncontent = {}
7292+
outfprejsoncontent = fp.read(outfjsonsize).decode("UTF-8")
7293+
if(outfjsonsize > 0):
7294+
try:
7295+
outfjsoncontent = json.loads(base64.b64decode(outfprejsoncontent).decode("UTF-8"))
7296+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
7297+
try:
7298+
outfjsoncontent = json.loads(outfprejsoncontent.decode("UTF-8"))
7299+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
7300+
outfprejsoncontent = ""
7301+
outfjsoncontent = {}
7302+
else:
7303+
outfprejsoncontent = ""
7304+
outfjsoncontent = {}
7305+
fp.seek(len(formatspecs['format_delimiter']), 1)
7306+
outfextrasize = int(inheaderdata[28], 16)
7307+
outfextrafields = int(inheaderdata[29], 16)
7308+
extrafieldslist = []
7309+
extrastart = 30
72847310
extraend = extrastart + outfextrafields
72857311
outfcs = inheaderdata[-2].lower()
72867312
outfccs = inheaderdata[-1].lower()
72877313
infcs = GetHeaderChecksum(
7288-
inheaderdata[:-2], inheaderdata[-4].lower(), True, formatspecs)
7314+
inheaderdata[:-2] + [outfprejsoncontent.encode()], inheaderdata[-4].lower(), True, formatspecs)
72897315
if(verbose):
72907316
VerbosePrintOut(outfname)
72917317
VerbosePrintOut("Record Number " + str(il) + "; File ID " +
@@ -7587,14 +7613,19 @@ def CatFileToArray(infile, fmttype="auto", seekstart=0, seekend=0, listonly=Fals
75877613
prefcompression = preheaderdata[14]
75887614
prefcsize = int(preheaderdata[15], 16)
75897615
prefseeknextfile = preheaderdata[26]
7590-
prefextrasize = int(preheaderdata[27], 16)
7591-
prefextrafields = int(preheaderdata[28], 16)
7592-
extrastart = 29
7616+
prefjsonsize = int(preheaderdata[27], 16)
7617+
prefjoutfprejsoncontent = fp.read(prefjsonsize).decode("UTF-8")
7618+
if(prefjsonsize <= 0):
7619+
prefjoutfprejsoncontent = "".encode()
7620+
fp.seek(len(formatspecs['format_delimiter']), 1)
7621+
prefextrasize = int(preheaderdata[28], 16)
7622+
prefextrafields = int(preheaderdata[29], 16)
7623+
extrastart = 30
75937624
extraend = extrastart + prefextrafields
75947625
prefcs = preheaderdata[-2].lower()
75957626
prenewfcs = preheaderdata[-1].lower()
75967627
prenewfcs = GetHeaderChecksum(
7597-
preheaderdata[:-2], preheaderdata[-4].lower(), True, formatspecs)
7628+
preheaderdata[:-2] + [prefjoutfprejsoncontent], preheaderdata[-4].lower(), True, formatspecs)
75987629
if(prefcs != prenewfcs and not skipchecksum):
75997630
VerbosePrintOut("File Header Checksum Error with file " +
76007631
prefname + " at offset " + str(prefhstart))
@@ -7684,10 +7715,26 @@ def CatFileToArray(infile, fmttype="auto", seekstart=0, seekend=0, listonly=Fals
76847715
outfdev_minor = int(inheaderdata[24], 16)
76857716
outfdev_major = int(inheaderdata[25], 16)
76867717
outfseeknextfile = inheaderdata[26]
7687-
outfextrasize = int(inheaderdata[27], 16)
7688-
outfextrafields = int(inheaderdata[28], 16)
7718+
outfjsonsize = int(inheaderdata[27], 16)
7719+
outfjsoncontent = {}
7720+
outfprejsoncontent = fp.read(outfjsonsize).decode("UTF-8")
7721+
if(outfjsonsize > 0):
7722+
try:
7723+
outfjsoncontent = json.loads(base64.b64decode(outfprejsoncontent).decode("UTF-8"))
7724+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
7725+
try:
7726+
outfjsoncontent = json.loads(outfprejsoncontent.decode("UTF-8"))
7727+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
7728+
outfprejsoncontent = ""
7729+
outfjsoncontent = {}
7730+
else:
7731+
outfprejsoncontent = ""
7732+
outfjsoncontent = {}
7733+
fp.seek(len(formatspecs['format_delimiter']), 1)
7734+
outfextrasize = int(inheaderdata[28], 16)
7735+
outfextrafields = int(inheaderdata[29], 16)
76897736
extrafieldslist = []
7690-
extrastart = 29
7737+
extrastart = 30
76917738
extraend = extrastart + outfextrafields
76927739
while(extrastart < extraend):
76937740
extrafieldslist.append(inheaderdata[extrastart])
@@ -7771,7 +7818,7 @@ def CatFileToArray(infile, fmttype="auto", seekstart=0, seekend=0, listonly=Fals
77717818
outfcontents.seek(0, 0)
77727819
if(not contentasfile):
77737820
outfcontents = outfcontents.read()
7774-
outlist['ffilelist'].append({'fid': realidnum, 'fidalt': fileidnum, 'fheadersize': outfheadsize, 'fhstart': outfhstart, 'fhend': outfhend, 'ftype': outftype, 'fencoding': outfencoding, 'fcencoding': outfcencoding, 'fname': outfname, 'fbasedir': outfbasedir, 'flinkname': outflinkname, 'fsize': outfsize, 'fatime': outfatime, 'fmtime': outfmtime, 'fctime': outfctime, 'fbtime': outfbtime, 'fmode': outfmode, 'fchmode': outfchmode, 'ftypemod': outftypemod, 'fwinattributes': outfwinattributes, 'fcompression': outfcompression, 'fcsize': outfcsize, 'fuid': outfuid, 'funame': outfuname, 'fgid': outfgid, 'fgname': outfgname, 'finode': outfinode, 'flinkcount': outflinkcount, 'fdev': outfdev, 'fminor': outfdev_minor, 'fmajor': outfdev_major, 'fseeknextfile': outfseeknextfile, 'fheaderchecksumtype': inheaderdata[-4], 'fcontentchecksumtype': inheaderdata[-3], 'fnumfields': outfnumfields + 2, 'frawheader': inheaderdata, 'fextrafields': outfextrafields, 'fextrafieldsize': outfextrasize, 'fextralist': extrafieldslist, 'fheaderchecksum': outfcs, 'fcontentchecksum': outfccs, 'fhascontents': pyhascontents, 'fcontentstart': outfcontentstart, 'fcontentend': outfcontentend, 'fcontentasfile': contentasfile, 'fcontents': outfcontents})
7821+
outlist['ffilelist'].append({'fid': realidnum, 'fidalt': fileidnum, 'fheadersize': outfheadsize, 'fhstart': outfhstart, 'fhend': outfhend, 'ftype': outftype, 'fencoding': outfencoding, 'fcencoding': outfcencoding, 'fname': outfname, 'fbasedir': outfbasedir, 'flinkname': outflinkname, 'fsize': outfsize, 'fatime': outfatime, 'fmtime': outfmtime, 'fctime': outfctime, 'fbtime': outfbtime, 'fmode': outfmode, 'fchmode': outfchmode, 'ftypemod': outftypemod, 'fwinattributes': outfwinattributes, 'fcompression': outfcompression, 'fcsize': outfcsize, 'fuid': outfuid, 'funame': outfuname, 'fgid': outfgid, 'fgname': outfgname, 'finode': outfinode, 'flinkcount': outflinkcount, 'fdev': outfdev, 'fminor': outfdev_minor, 'fmajor': outfdev_major, 'fseeknextfile': outfseeknextfile, 'fheaderchecksumtype': inheaderdata[-4], 'fcontentchecksumtype': inheaderdata[-3], 'fnumfields': outfnumfields + 2, 'frawheader': inheaderdata, 'fextrafields': outfextrafields, 'fextrafieldsize': outfextrasize, 'fextralist': extrafieldslist, 'jsondata': outfjsoncontent, 'fheaderchecksum': outfcs, 'fcontentchecksum': outfccs, 'fhascontents': pyhascontents, 'fcontentstart': outfcontentstart, 'fcontentend': outfcontentend, 'fcontentasfile': contentasfile, 'fcontents': outfcontents})
77757822
fileidnum = fileidnum + 1
77767823
realidnum = realidnum + 1
77777824
if(returnfp):

0 commit comments

Comments
 (0)