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'); + }); });