Skip to content

Commit ba5bb69

Browse files
authored
Fix parsing invalid Dockerfile (#4943)
1 parent efe6601 commit ba5bb69

File tree

16 files changed

+1789
-0
lines changed

16 files changed

+1789
-0
lines changed

pkg/skaffold/docker/dependencies_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,11 @@ FROM stage
216216
ADD ./file /etc/file
217217
`
218218

219+
const invalidFrom = `
220+
FROM
221+
COPY . /
222+
`
223+
219224
type fakeImageFetcher struct{}
220225

221226
func (f *fakeImageFetcher) fetch(image string, _ Config) (*v1.ConfigFile, error) {
@@ -530,6 +535,12 @@ func TestGetDependencies(t *testing.T) {
530535
ignoreFilename: "Dockerfile.dockerignore",
531536
expected: []string{".dot", "Dockerfile", "Dockerfile.dockerignore", "file", "server.go", "test.conf", "worker.go"},
532537
},
538+
{
539+
description: "invalid dockerfile",
540+
dockerfile: invalidFrom,
541+
workspace: ".",
542+
shouldErr: true,
543+
},
533544
}
534545

535546
for _, test := range tests {

pkg/skaffold/docker/parse.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
v1 "github.com/google/go-containerregistry/pkg/v1"
2929
"github.com/moby/buildkit/frontend/dockerfile/command"
30+
"github.com/moby/buildkit/frontend/dockerfile/instructions"
3031
"github.com/moby/buildkit/frontend/dockerfile/parser"
3132
"github.com/moby/buildkit/frontend/dockerfile/shell"
3233
"github.com/sirupsen/logrus"
@@ -75,6 +76,11 @@ func readCopyCmdsFromDockerfile(onlyLastImage bool, absDockerfilePath, workspace
7576
return nil, fmt.Errorf("parsing dockerfile %q: %w", absDockerfilePath, err)
7677
}
7778

79+
// instructions.Parse will check for malformed Dockerfile
80+
if _, _, err := instructions.Parse(res.AST); err != nil {
81+
return nil, fmt.Errorf("parsing dockerfile %q: %w", absDockerfilePath, err)
82+
}
83+
7884
dockerfileLines := res.AST.Children
7985

8086
if err := expandBuildArgs(dockerfileLines, buildArgs); err != nil {

vendor/github.com/moby/buildkit/frontend/dockerfile/instructions/bflag.go

Lines changed: 200 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)