Skip to content

Commit eda755d

Browse files
committed
fix: add case when json is invalid when uploading
1 parent d805c67 commit eda755d

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

app/lib.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,36 @@ function extractVaultFromFile (data) {
116116
}
117117
}
118118

119-
// attempt 6: chromium 000005.ldb on windows
119+
// attemp 6: When the backup file is not a valid json, it tries to extract the keyring controller object from the string.
120+
{
121+
const matches = data.match(
122+
/(?<="KeyringController":)(.*?)(?=,"[a-zA-z]+":{)/
123+
);
124+
if (matches && matches.length) {
125+
try {
126+
const keyringControllerStateFragment = matches[1];
127+
const dataRegex = /\\"data\\":\\"([A-Za-z0-9+\/]*=*)/u;
128+
const ivRegex = /,\\"iv\\":\\"([A-Za-z0-9+\/]{10,40}=*)/u;
129+
const saltRegex = /,\\"salt\\":\\"([A-Za-z0-9+\/]{10,100}=*)\\"/;
130+
const keyMetaRegex = /,\\"keyMetadata\\":(.*}})/;
131+
132+
const vaultParts = [dataRegex, ivRegex, saltRegex, keyMetaRegex]
133+
.map((reg) => keyringControllerStateFragment.match(reg))
134+
.map((match) => match[1]);
135+
136+
return {
137+
data: vaultParts[0],
138+
iv: vaultParts[1],
139+
salt: vaultParts[2],
140+
keyMetadata: JSON.parse(vaultParts[3].replaceAll("\\", "")),
141+
};
142+
} catch (err) {
143+
// Not valid JSON: continue
144+
}
145+
}
146+
}
147+
148+
// attempt 7: chromium 000005.ldb on windows
120149
const matchRegex = /Keyring[0-9][^\}]*(\{[^\{\}]*\\"\})/gu
121150
const captureRegex = /Keyring[0-9][^\}]*(\{[^\{\}]*\\"\})/u
122151
const ivRegex = /\\"iv.{1,4}[^A-Za-z0-9+\/]{1,10}([A-Za-z0-9+\/]{10,40}=*)/u

0 commit comments

Comments
 (0)