From 53958dbe613e83547a09a8b208b8f581066d14ad Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 10 Mar 2022 15:58:20 +0100 Subject: [PATCH 1/2] fix: properly handle child process stdio chunking Converting individual chunks from UTF-8 to JS strings is problematic because it does not handle UTF-8 characters that are split across chunks properly. Use the proper way of reading string data from streams instead. --- src/spawn-promise.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/spawn-promise.ts b/src/spawn-promise.ts index e9d8a208..6e419e8b 100644 --- a/src/spawn-promise.ts +++ b/src/spawn-promise.ts @@ -33,14 +33,13 @@ export default function spawn(exe: string, params: string[], opts?: SpawnOptions if (--refCount <= 0 && !rejected) resolve(stdout); }; - let bufHandler = (b: Buffer): void => { - let chunk = b.toString(); + let bufHandler = (chunk: string): void => { stdout += chunk; }; - proc.stdout.on('data', bufHandler); + proc.stdout.setEncoding('utf8').on('data', bufHandler); proc.stdout.once('close', release); - proc.stderr.on('data', bufHandler); + proc.stderr.setEncoding('utf8').on('data', bufHandler); proc.stderr.once('close', release); proc.on('error', (e: Error): void => reject(e)); From 9b63d951a945a00798dfa291066844520d35329d Mon Sep 17 00:00:00 2001 From: Keeley Hammond Date: Wed, 7 Feb 2024 10:28:44 -0800 Subject: [PATCH 2/2] fix: update bufHandler after main merge --- src/spawn-promise.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spawn-promise.ts b/src/spawn-promise.ts index b9b81cca..e125a869 100644 --- a/src/spawn-promise.ts +++ b/src/spawn-promise.ts @@ -33,7 +33,7 @@ export default function spawn(exe: string, params: string[], opts?: SpawnOptions if (--refCount <= 0 && !rejected) resolve(stdout); }; - let bufHandler = (chunk: string): void => { + const bufHandler = (chunk: string): void => { stdout += chunk; };