Procházet zdrojové kódy

Merge pull request #8579 from erikh/builder_html_panic

builder: handle anything we cannot parse the command for as a fatal error
Alexandr Morozov před 10 roky
rodič
revize
abec82bdee

+ 4 - 1
builder/parser/parser.go

@@ -72,7 +72,10 @@ func parseLine(line string) (string, *Node, error) {
 		return line, nil, nil
 	}
 
-	cmd, args := splitCommand(line)
+	cmd, args, err := splitCommand(line)
+	if err != nil {
+		return "", nil, err
+	}
 
 	node := &Node{}
 	node.Value = cmd

+ 2 - 0
builder/parser/testfiles-negative/html-page-yes-really-thanks-lk4d4/Dockerfile

@@ -0,0 +1,2 @@
+<html>
+</html>

+ 11 - 3
builder/parser/utils.go

@@ -1,6 +1,9 @@
 package parser
 
-import "strings"
+import (
+	"fmt"
+	"strings"
+)
 
 // QuoteString walks characters (after trimming), escapes any quotes and
 // escapes, then wraps the whole thing in quotes. Very useful for generating
@@ -66,12 +69,17 @@ func fullDispatch(cmd, args string) (*Node, map[string]bool, error) {
 
 // splitCommand takes a single line of text and parses out the cmd and args,
 // which are used for dispatching to more exact parsing functions.
-func splitCommand(line string) (string, string) {
+func splitCommand(line string) (string, string, error) {
 	cmdline := TOKEN_WHITESPACE.Split(line, 2)
+
+	if len(cmdline) != 2 {
+		return "", "", fmt.Errorf("We do not understand this file. Please ensure it is a valid Dockerfile. Parser error at %q", line)
+	}
+
 	cmd := strings.ToLower(cmdline[0])
 	// the cmd should never have whitespace, but it's possible for the args to
 	// have trailing whitespace.
-	return cmd, strings.TrimSpace(cmdline[1])
+	return cmd, strings.TrimSpace(cmdline[1]), nil
 }
 
 // covers comments and empty lines. Lines should be trimmed before passing to