Browse Source

Merge pull request #9980 from erikh/parser-with-no-command

Fix a parser error where an empty RUN statement would cause a panic
Doug Davis 10 years ago
parent
commit
32cde64c04

+ 6 - 1
builder/parser/parser.go

@@ -3,6 +3,7 @@ package parser
 
 import (
 	"bufio"
+	"fmt"
 	"io"
 	"regexp"
 	"strings"
@@ -32,7 +33,7 @@ type Node struct {
 var (
 	dispatch                map[string]func(string) (*Node, map[string]bool, error)
 	TOKEN_WHITESPACE        = regexp.MustCompile(`[\t\v\f\r ]+`)
-	TOKEN_LINE_CONTINUATION = regexp.MustCompile(`\\\s*$`)
+	TOKEN_LINE_CONTINUATION = regexp.MustCompile(`\\[ \t]*$`)
 	TOKEN_COMMENT           = regexp.MustCompile(`^#.*$`)
 )
 
@@ -77,6 +78,10 @@ func parseLine(line string) (string, *Node, error) {
 		return "", nil, err
 	}
 
+	if len(args) == 0 {
+		return "", nil, fmt.Errorf("Instruction %q is empty; cannot continue", cmd)
+	}
+
 	node := &Node{}
 	node.Value = cmd
 

+ 8 - 0
builder/parser/testfiles-negative/empty-instruction/Dockerfile

@@ -0,0 +1,8 @@
+FROM dockerfile/rabbitmq
+
+RUN
+  rabbitmq-plugins enable \
+   rabbitmq_shovel \
+   rabbitmq_shovel_management \
+   rabbitmq_federation \
+   rabbitmq_federation_management

+ 21 - 0
integration-cli/docker_cli_build_test.go

@@ -22,6 +22,27 @@ import (
 	"github.com/docker/docker/pkg/archive"
 )
 
+func TestBuildEmptyWhitespace(t *testing.T) {
+	name := "testbuildemptywhitespace"
+	defer deleteImages(name)
+
+	_, err := buildImage(
+		name,
+		`
+    FROM busybox
+    RUN 
+      quux \
+      bar
+    `,
+		true)
+
+	if err == nil {
+		t.Fatal("no error when dealing with a RUN statement with no content on the same line")
+	}
+
+	logDone("build - statements with whitespace and no content should generate a parse error")
+}
+
 func TestBuildShCmdJSONEntrypoint(t *testing.T) {
 	name := "testbuildshcmdjsonentrypoint"
 	defer deleteImages(name)