From a7d72aa4915f30c02b54946ef9592f79f239d82b Mon Sep 17 00:00:00 2001 From: NeoPlays <80448387+NeoPlays@users.noreply.github.com> Date: Tue, 14 Jan 2025 13:40:57 +0100 Subject: [PATCH 1/2] FIX: Escaping Problem of Passwords on Import --- launcher/src/backend/ValidatorAccountManager.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/launcher/src/backend/ValidatorAccountManager.js b/launcher/src/backend/ValidatorAccountManager.js index 71594f9d9..ee4376649 100755 --- a/launcher/src/backend/ValidatorAccountManager.js +++ b/launcher/src/backend/ValidatorAccountManager.js @@ -33,7 +33,13 @@ export class ValidatorAccountManager { } return readFileSync(file.path, { encoding: "utf8" }); }); - + //escape all passwords for shell + passwords = passwords.map((p) => { + let pass = p; + if (pass.includes('"')) pass = pass.replaceAll(/"/g, '\\"'); + if (pass.includes("'")) pass = pass.replaceAll(/'/g, `'\\''`); + return pass; + }); for (let i = 0; i < content.length; i += chunkSize) { const contentChunk = content.slice(i, i + chunkSize); const passwordChunk = passwords.slice(i, i + chunkSize); @@ -315,7 +321,7 @@ export class ValidatorAccountManager { apiToken ? `-H 'Authorization: Bearer ${apiToken}'` : "", `-s`, ]; - if (data) command.push(`-d '${JSON.stringify(data)}'`); + if (data) command.push(`-d '${JSON.stringify(data).replaceAll(/\\\\/g, "\\")}'`); command = command.concat(args); return await this.nodeConnection.sshService.exec(command.join(" ")); } From f428497ac8df676959d4d618e2dbe4427f0da8ce Mon Sep 17 00:00:00 2001 From: NeoPlays <80448387+NeoPlays@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:53:08 +0100 Subject: [PATCH 2/2] FIX: escaping --- launcher/src/backend/ValidatorAccountManager.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/launcher/src/backend/ValidatorAccountManager.js b/launcher/src/backend/ValidatorAccountManager.js index ee4376649..a29dfdffb 100755 --- a/launcher/src/backend/ValidatorAccountManager.js +++ b/launcher/src/backend/ValidatorAccountManager.js @@ -36,8 +36,10 @@ export class ValidatorAccountManager { //escape all passwords for shell passwords = passwords.map((p) => { let pass = p; - if (pass.includes('"')) pass = pass.replaceAll(/"/g, '\\"'); - if (pass.includes("'")) pass = pass.replaceAll(/'/g, `'\\''`); + if (pass.includes("\\")) pass = pass.replaceAll(/\\/g, "\\\\"); + // eslint-disable-next-line no-useless-escape + if (pass.includes('"')) pass = pass.replaceAll(/"/g, `\"`); + if (pass.includes("'")) pass = pass.replaceAll(/'/g, `'\\''`); // yes i tried to escape with \' return pass; }); for (let i = 0; i < content.length; i += chunkSize) {