@@ -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