Skip to content

Commit b847755

Browse files
author
Kazuki Suzuki Przyborowski
committed
Update pyarchivefile.py
1 parent 8606201 commit b847755

1 file changed

Lines changed: 39 additions & 9 deletions

File tree

pyarchivefile.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2089,9 +2089,17 @@ def ReadFileHeaderDataWithContent(fp, listonly=False, uncompress=True, skipcheck
20892089
fjsoncontent = {}
20902090
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
20912091
if(len(fjsoncontent) > 0):
2092-
fjsoncontent = json.loads(fprejsoncontent.decode("UTF-8"))
2092+
try:
2093+
fjsoncontent = json.loads(base64.b64decode(fprejsoncontent).decode("UTF-8"))
2094+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
2095+
try:
2096+
fjsoncontent = json.loads(fprejsoncontent.decode("UTF-8"))
2097+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
2098+
fprejsoncontent = ""
2099+
fjsoncontent = {}
20932100
else:
20942101
fprejsoncontent = ""
2102+
fjsoncontent = {}
20952103
fp.seek(len(delimiter), 1)
20962104
HeaderOut.append(fjsoncontent)
20972105
newfcs = GetHeaderChecksum(
@@ -2220,9 +2228,17 @@ def ReadFileHeaderDataWithContentToArray(fp, listonly=False, contentasfile=True,
22202228
fjsoncontent = {}
22212229
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
22222230
if(len(fjsoncontent) > 0):
2223-
fjsoncontent = json.loads(fprejsoncontent.decode("UTF-8"))
2231+
try:
2232+
fjsoncontent = json.loads(base64.b64decode(fprejsoncontent).decode("UTF-8"))
2233+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
2234+
try:
2235+
fjsoncontent = json.loads(fprejsoncontent.decode("UTF-8"))
2236+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
2237+
fprejsoncontent = ""
2238+
fjsoncontent = {}
22242239
else:
22252240
fprejsoncontent = ""
2241+
fjsoncontent = {}
22262242
fp.seek(len(delimiter), 1)
22272243
fcs = HeaderOut[-2].lower()
22282244
fccs = HeaderOut[-1].lower()
@@ -2293,7 +2309,7 @@ def ReadFileHeaderDataWithContentToArray(fp, listonly=False, contentasfile=True,
22932309
if(not contentasfile):
22942310
fcontents = fcontents.read()
22952311
outlist = {'fheadersize': fheadsize, 'fhstart': fheaderstart, 'fhend': fhend, 'ftype': ftype, 'fencoding': fencoding, 'fcencoding': fcencoding, 'fname': fname, 'fbasedir': fbasedir, 'flinkname': flinkname, 'fsize': fsize, 'fatime': fatime, 'fmtime': fmtime, 'fctime': fctime, 'fbtime': fbtime, 'fmode': fmode, 'fchmode': fchmode, 'ftypemod': ftypemod, 'fwinattributes': fwinattributes, 'fcompression': fcompression, 'fcsize': fcsize, 'fuid': fuid, 'funame': funame, 'fgid': fgid, 'fgname': fgname, 'finode': finode, 'flinkcount': flinkcount,
2296-
'fdev': fdev, 'fminor': fdev_minor, 'fmajor': fdev_major, 'fseeknextfile': fseeknextfile, 'fheaderchecksumtype': HeaderOut[-4], 'fcontentchecksumtype': HeaderOut[-3], 'fnumfields': fnumfields + 2, 'frawheader': HeaderOut, 'fextrafields': fextrafields, 'fextrafieldsize': fextrasize, 'fextralist': fextrafieldslist, 'fheaderchecksum': fcs, 'fcontentchecksum': fccs, 'fhascontents': pyhascontents, 'fcontentstart': fcontentstart, 'fcontentend': fcontentend, 'fcontentasfile': contentasfile, 'fcontents': fcontents}
2312+
'fdev': fdev, 'fminor': fdev_minor, 'fmajor': fdev_major, 'fseeknextfile': fseeknextfile, 'fheaderchecksumtype': HeaderOut[-4], 'fcontentchecksumtype': HeaderOut[-3], 'fnumfields': fnumfields + 2, 'frawheader': HeaderOut, 'fextrafields': fextrafields, 'fextrafieldsize': fextrasize, 'fextralist': fextrafieldslist, 'jsondata': fjsoncontent, 'fheaderchecksum': fcs, 'fcontentchecksum': fccs, 'fhascontents': pyhascontents, 'fcontentstart': fcontentstart, 'fcontentend': fcontentend, 'fcontentasfile': contentasfile, 'fcontents': fcontents}
22972313
return outlist
22982314

22992315

@@ -2362,9 +2378,17 @@ def ReadFileHeaderDataWithContentToList(fp, listonly=False, contentasfile=False,
23622378
fjsoncontent = {}
23632379
fprejsoncontent = fp.read(fjsonsize).decode("UTF-8")
23642380
if(len(fjsoncontent) > 0):
2365-
fjsoncontent = json.loads(fprejsoncontent.decode("UTF-8"))
2381+
try:
2382+
fjsoncontent = json.loads(base64.b64decode(fprejsoncontent).decode("UTF-8"))
2383+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
2384+
try:
2385+
fjsoncontent = json.loads(fprejsoncontent.decode("UTF-8"))
2386+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
2387+
fprejsoncontent = ""
2388+
fjsoncontent = ""
23662389
else:
23672390
fprejsoncontent = ""
2391+
fjsoncontent = ""
23682392
fp.seek(len(delimiter), 1)
23692393
fcs = HeaderOut[-2].lower()
23702394
fccs = HeaderOut[-1].lower()
@@ -3359,11 +3383,17 @@ def AppendFileHeaderWithContent(fp, filevalues=[], extradata=[], filecontent="",
33593383
tmpoutlen = len(filevalues) + len(extradata) + 7
33603384
tmpoutlenhex = format(tmpoutlen, 'x').lower()
33613385
tmpoutlist = filevalues
3362-
fprejsoncontent = {}
3386+
fprejsoncontent = {'testing': "test"}
33633387
if(len(fprejsoncontent) > 0):
3364-
fjsoncontent = json.dumps(fprejsoncontent, separators=(',', ':'))
3388+
try:
3389+
fjsoncontent = base64.b64encode(json.dumps(fprejsoncontent).encode("UTF-8"))
3390+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
3391+
try:
3392+
fjsoncontent = json.dumps(fprejsoncontent.decode("UTF-8"))
3393+
except (binascii.Error, json.decoder.JSONDecodeError, UnicodeDecodeError):
3394+
fjsoncontent = "".encode("UTF-8")
33653395
else:
3366-
fjsoncontent = ""
3396+
fjsoncontent = "".encode("UTF-8")
33673397
fjsonsize = format(len(fjsoncontent), 'x').lower()
33683398
tmpoutlist.insert(0, tmpoutlenhex)
33693399
tmpoutlist.append(fjsonsize)
@@ -3383,7 +3413,7 @@ def AppendFileHeaderWithContent(fp, filevalues=[], extradata=[], filecontent="",
33833413
nullstrecd = formatspecs['format_delimiter'].encode('UTF-8')
33843414
print(outfileoutstr)
33853415
outfileheadercshex = GetFileChecksum(
3386-
outfileoutstr + nullstrecd + fjsoncontent.encode('UTF-8'), checksumtype[0], True, formatspecs)
3416+
outfileoutstr + nullstrecd + fjsoncontent, checksumtype[0], True, formatspecs)
33873417
if(len(filecontent) == 0):
33883418
outfilecontentcshex = GetFileChecksum(
33893419
filecontent, "none", False, formatspecs)
@@ -3402,7 +3432,7 @@ def AppendFileHeaderWithContent(fp, filevalues=[], extradata=[], filecontent="",
34023432
AppendNullBytes([outfileheadercshex, outfilecontentcshex],
34033433
formatspecs['format_delimiter'])
34043434
outfileoutstrecd = outfileoutstr
3405-
outfileout = outfileoutstrecd + fjsoncontent.encode('UTF-8') + nullstrecd + filecontent + nullstrecd
3435+
outfileout = outfileoutstrecd + fjsoncontent + nullstrecd + filecontent + nullstrecd
34063436
try:
34073437
fp.write(outfileout)
34083438
except OSError:

0 commit comments

Comments
 (0)