From faaa23b8021a7438b61a394e608853ac09a55aaf Mon Sep 17 00:00:00 2001 From: throwaway96 <68320646+throwaway96@users.noreply.github.com> Date: Sat, 9 Mar 2024 02:05:00 -0500 Subject: [PATCH] service.ts: fix /exec base64 on webOS 1 --- services/service.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/services/service.ts b/services/service.ts index 52e2123..1375709 100644 --- a/services/service.ts +++ b/services/service.ts @@ -703,22 +703,32 @@ function runService(): void { const payload = message.payload as ExecPayload; - const encoding = nodeVersion.major === 0 && nodeVersion.minor < 12 ? null : 'buffer'; - - child_process.exec(payload.command, { encoding }, (error, stdout, stderr) => { + function commonResponse(error: child_process.ExecException | null, stdout: Buffer, stderr: Buffer) { const response = { - error, stdoutString: stdout.toString(), stdoutBytes: stdout.toString('base64'), stderrString: stderr.toString(), stderrBytes: stderr.toString('base64'), }; - if (error) { + if (error !== null) { message.respond(makeError(error.message, response)); } else { message.respond(makeSuccess(response)); } - }); + } + + if (nodeVersion.major !== 0 && nodeVersion.minor >= 12) { + child_process.exec(payload.command, { encoding: 'buffer' }, commonResponse); + } else { + /* Node.js v0.10.x doesn't provide callback with Buffers, so fake it */ + child_process.exec( + payload.command, + { encoding: 'binary' }, + (error: child_process.ExecException | null, stdout: string, stderr: string) => { + commonResponse(error, Buffer.from(stdout, 'binary'), Buffer.from(stderr, 'binary')); + }, + ); + } }); /**