fix(builtin): properly quote env vars passed to nodejs_binary
diff --git a/internal/node/node.bzl b/internal/node/node.bzl
index 6bf31c2..18d7ce4 100644
--- a/internal/node/node.bzl
+++ b/internal/node/node.bzl
@@ -204,7 +204,7 @@
# Add all env vars from the ctx attr
for [key, value] in ctx.attr.env.items():
- env_vars += "export %s=%s\n" % (key, ctx.expand_make_variables("env", expand_location_into_runfiles(ctx, value, data), {}))
+ env_vars += "export %s=\"%s\"\n" % (key, ctx.expand_make_variables("env", expand_location_into_runfiles(ctx, value, data), {}))
# While we can derive the workspace from the pwd when running locally
# because it is in the execroot path `execroot/my_wksp`, on RBE the
diff --git a/internal/node/test/BUILD.bazel b/internal/node/test/BUILD.bazel
index b4e1a32..b7bf882 100644
--- a/internal/node/test/BUILD.bazel
+++ b/internal/node/test/BUILD.bazel
@@ -410,6 +410,7 @@
env = {
"LOC": "$(location :dump_build_env.js)",
"SOME_TEST_ENV": "$(SOME_TEST_ENV)",
+ "BACKSLASHES": "C:\\some path\\on\\windows.exe",
},
)
diff --git a/internal/node/test/env.spec.js b/internal/node/test/env.spec.js
index 4a8a772..455a864 100644
--- a/internal/node/test/env.spec.js
+++ b/internal/node/test/env.spec.js
@@ -123,4 +123,9 @@
const env = require(runfiles.resolvePackageRelative('dump_build_env_attr.json'));
expect(env['SOME_TEST_ENV']).toBe('some_value')
});
+
+ it('should correctly pass environment variables with backslashes', function() {
+ const env = require(runfiles.resolvePackageRelative('dump_build_env_attr.json'));
+ expect(env['BACKSLASHES']).toBe('C:\\some path\\on\\windows.exe');
+ });
});