summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Tucker <dt@docker.com>2017-04-21 13:14:21 +0100
committerDaniel Nephin <dnephin@docker.com>2017-05-01 18:18:01 -0400
commit8c532a682272b65b208b6eeff1581b9553e556ca (patch)
treec74e4a70776552e764cf7f836e06a1b714607e6a
parent9986762bc7c1d2ee858c990f43f3175d27628f04 (diff)
downloaddocker-8c532a682272b65b208b6eeff1581b9553e556ca.tar.gz
builder: Make builtin arg pruning work with > 1 arg
The previous implementation would error out with "Unexpected EOF" which was caused by an underlying "array index out-of-bounds" error. The root cause was deleting items from the same array that was being iterated over. The iteration was unaware that the array size had changed, resulting in an error. The new implementation builds a new array instead of mutating a copy of the old one. Fixes: #32744 Signed-off-by: Dave Tucker <dt@docker.com>
-rw-r--r--builder/dockerfile/dispatchers.go9
-rw-r--r--integration-cli/docker_cli_build_test.go12
2 files changed, 12 insertions, 9 deletions
diff --git a/builder/dockerfile/dispatchers.go b/builder/dockerfile/dispatchers.go
index fb064e5971..4c165aff13 100644
--- a/builder/dockerfile/dispatchers.go
+++ b/builder/dockerfile/dispatchers.go
@@ -449,12 +449,11 @@ func run(b *Builder, args []string, attributes map[string]bool, original string)
// these args are transparent so resulting image should be the same regardless of the value
if len(cmdBuildEnv) > 0 {
saveCmd = config.Cmd
- tmpBuildEnv := make([]string, len(cmdBuildEnv))
- copy(tmpBuildEnv, cmdBuildEnv)
- for i, env := range tmpBuildEnv {
+ var tmpBuildEnv []string
+ for _, env := range cmdBuildEnv {
key := strings.SplitN(env, "=", 2)[0]
- if b.buildArgs.IsUnreferencedBuiltin(key) {
- tmpBuildEnv = append(tmpBuildEnv[:i], tmpBuildEnv[i+1:]...)
+ if !b.buildArgs.IsUnreferencedBuiltin(key) {
+ tmpBuildEnv = append(tmpBuildEnv, env)
}
}
sort.Strings(tmpBuildEnv)
diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go
index ea25959e44..19b108856e 100644
--- a/integration-cli/docker_cli_build_test.go
+++ b/integration-cli/docker_cli_build_test.go
@@ -4345,7 +4345,8 @@ func (s *DockerSuite) TestBuildTimeArgHistoryExclusions(c *check.C) {
ARG %s
RUN echo "Testing Build Args!"`, envKey, explicitProxyKey)
buildImage(imgName,
- cli.WithFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal),
+ cli.WithFlags("--build-arg", "https_proxy=https://proxy.example.com",
+ "--build-arg", fmt.Sprintf("%s=%s", envKey, envVal),
"--build-arg", fmt.Sprintf("%s=%s", explicitProxyKey, explicitProxyVal),
"--build-arg", proxy),
build.WithDockerfile(dockerfile),
@@ -4355,6 +4356,9 @@ func (s *DockerSuite) TestBuildTimeArgHistoryExclusions(c *check.C) {
if strings.Contains(out, proxy) {
c.Fatalf("failed to exclude proxy settings from history!")
}
+ if strings.Contains(out, "https_proxy") {
+ c.Fatalf("failed to exclude proxy settings from history!")
+ }
if !strings.Contains(out, fmt.Sprintf("%s=%s", envKey, envVal)) {
c.Fatalf("explicitly defined ARG %s is not in output", explicitProxyKey)
}
@@ -6156,7 +6160,7 @@ func (s *DockerSuite) TestBuildCopyFromPreviousFromWindows(c *check.C) {
func (s *DockerSuite) TestBuildCopyFromForbidWindowsSystemPaths(c *check.C) {
testRequires(c, DaemonIsWindows)
dockerfile := `
- FROM ` + testEnv.MinimalBaseImage() + `
+ FROM ` + testEnv.MinimalBaseImage() + `
FROM ` + testEnv.MinimalBaseImage() + `
COPY --from=0 %s c:\\oscopy
`
@@ -6173,7 +6177,7 @@ func (s *DockerSuite) TestBuildCopyFromForbidWindowsSystemPaths(c *check.C) {
func (s *DockerSuite) TestBuildCopyFromForbidWindowsRelativePaths(c *check.C) {
testRequires(c, DaemonIsWindows)
dockerfile := `
- FROM ` + testEnv.MinimalBaseImage() + `
+ FROM ` + testEnv.MinimalBaseImage() + `
FROM ` + testEnv.MinimalBaseImage() + `
COPY --from=0 %s c:\\oscopy
`
@@ -6192,7 +6196,7 @@ func (s *DockerSuite) TestBuildCopyFromWindowsIsCaseInsensitive(c *check.C) {
testRequires(c, DaemonIsWindows)
dockerfile := `
FROM ` + testEnv.MinimalBaseImage() + `
- COPY foo /
+ COPY foo /
FROM ` + testEnv.MinimalBaseImage() + `
COPY --from=0 c:\\fOo c:\\copied
RUN type c:\\copied