diff --git a/builder/parser/line_parsers.go b/builder/parser/line_parsers.go index bdfe3d5a42..b28693666c 100644 --- a/builder/parser/line_parsers.go +++ b/builder/parser/line_parsers.go @@ -234,7 +234,7 @@ func parseString(rest string) (*Node, map[string]bool, error) { func parseJSON(rest string) (*Node, map[string]bool, error) { rest = strings.TrimLeftFunc(rest, unicode.IsSpace) if !strings.HasPrefix(rest, "[") { - return nil, nil, fmt.Errorf("Error parsing \"%s\" as a JSON array", rest) + return nil, nil, fmt.Errorf(`Error parsing "%s" as a JSON array`, rest) } var myJSON []interface{} diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index dad833ac42..409132c71d 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -5444,3 +5444,30 @@ func (s *DockerTrustSuite) TestBuildContextDirIsSymlink(c *check.C) { c.Fatalf("build failed with exit status %d: %s", exitStatus, out) } } + +// Issue #15634: COPY fails when path starts with "null" +func (s *DockerSuite) TestBuildNullStringInAddCopyVolume(c *check.C) { + name := "testbuildnullstringinaddcopyvolume" + + ctx, err := fakeContext(` + FROM busybox + + ADD null / + COPY nullfile / + VOLUME nullvolume + `, + map[string]string{ + "null": "test1", + "nullfile": "test2", + }, + ) + + if err != nil { + c.Fatal(err) + } + defer ctx.Close() + + if _, err := buildImageFromContext(name, ctx, true); err != nil { + c.Fatal(err) + } +}