From 2d6952e8a52168f7204fc6834e6f5d28a5b21a37 Mon Sep 17 00:00:00 2001 From: Soshi Katsuta Date: Tue, 18 Aug 2015 02:22:57 +0900 Subject: [PATCH] builder: avoid decoding "null" string in ADD, COPY and VOLUME step to nil slice Signed-off-by: Soshi Katsuta --- builder/parser/line_parsers.go | 5 +++++ builder/parser/testfiles/ADD-COPY-with-JSON/Dockerfile | 2 ++ builder/parser/testfiles/ADD-COPY-with-JSON/result | 2 ++ 3 files changed, 9 insertions(+) diff --git a/builder/parser/line_parsers.go b/builder/parser/line_parsers.go index 9bea21a958..bdfe3d5a42 100644 --- a/builder/parser/line_parsers.go +++ b/builder/parser/line_parsers.go @@ -232,6 +232,11 @@ func parseString(rest string) (*Node, map[string]bool, error) { // parseJSON converts JSON arrays to an AST. 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) + } + var myJSON []interface{} if err := json.NewDecoder(strings.NewReader(rest)).Decode(&myJSON); err != nil { return nil, nil, err diff --git a/builder/parser/testfiles/ADD-COPY-with-JSON/Dockerfile b/builder/parser/testfiles/ADD-COPY-with-JSON/Dockerfile index 49372b0607..00b444cba5 100644 --- a/builder/parser/testfiles/ADD-COPY-with-JSON/Dockerfile +++ b/builder/parser/testfiles/ADD-COPY-with-JSON/Dockerfile @@ -3,6 +3,8 @@ MAINTAINER Seongyeol Lim COPY . /go/src/github.com/docker/docker ADD . / +ADD null / +COPY nullfile /tmp ADD [ "vimrc", "/tmp" ] COPY [ "bashrc", "/tmp" ] COPY [ "test file", "/tmp" ] diff --git a/builder/parser/testfiles/ADD-COPY-with-JSON/result b/builder/parser/testfiles/ADD-COPY-with-JSON/result index 86c3fef726..85aee64018 100644 --- a/builder/parser/testfiles/ADD-COPY-with-JSON/result +++ b/builder/parser/testfiles/ADD-COPY-with-JSON/result @@ -2,6 +2,8 @@ (maintainer "Seongyeol Lim ") (copy "." "/go/src/github.com/docker/docker") (add "." "/") +(add "null" "/") +(copy "nullfile" "/tmp") (add "vimrc" "/tmp") (copy "bashrc" "/tmp") (copy "test file" "/tmp")