From 267b210c40c781742087bb49007017bc75281777 Mon Sep 17 00:00:00 2001 From: Dean Brettle Date: Wed, 4 Jul 2018 22:09:27 -0700 Subject: [PATCH] Fix test failures on darwin caused by non-GNU awk Use printf("...%c...", 0) instead of printf("...\0...") to inject \0. --- spec/update-process-env-spec.js | 4 ++-- src/update-process-env.js | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 2cddd6e46..34057f9e0 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -224,7 +224,7 @@ describe('updateProcessEnv(launchEnv)', function () { await updateProcessEnv(process.env) expect(spawn.calls.length).toBe(1) expect(spawn.calls[0].command).toBe('/my/custom/bash') - expect(spawn.calls[0].args).toEqual(['-ilc', 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s\\0",v,ENVIRON[v])}\'']) + expect(spawn.calls[0].args).toEqual(['-ilc', 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\'']) expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', 'MULTILINE\nNAME': 'multiline\nvalue', @@ -247,7 +247,7 @@ describe('updateProcessEnv(launchEnv)', function () { await updateProcessEnv(process.env) expect(spawn.calls.length).toBe(1) expect(spawn.calls[0].command).toBe('/my/custom/bash') - expect(spawn.calls[0].args).toEqual(['-ilc', 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s\\0",v,ENVIRON[v])}\'']) + expect(spawn.calls[0].args).toEqual(['-ilc', 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\'']) expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', 'MULTILINE\nNAME': 'multiline\nvalue', diff --git a/src/update-process-env.js b/src/update-process-env.js index d44321bd7..422685b1d 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -14,8 +14,9 @@ const PLATFORMS_KNOWN_TO_WORK = new Set([ ]) // Shell command that returns env var=value lines separated by \0s so that -// newlines are handled properly -const ENV_COMMAND = 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s\\0",v,ENVIRON[v])}\'' +// newlines are handled properly. Note: need to use %c to inject the \0s +// to work with some non GNU awks. +const ENV_COMMAND = 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\'' async function updateProcessEnv (launchEnv) { let envToAssign