Skip to content

Commit

Permalink
Skip UTF-8 BOM bytes from Dockerignore if exist
Browse files Browse the repository at this point in the history
This fix tries to address issues related to moby#23221 where Dockerignore
may consists of UTF-8 BOM. This likely happens when Notepad
tries to save a file as UTF-8 in Windows.

This fix skips the UTF-8 BOM bytes from the beginning of the
Dockerignore if exists.

Additional tests has been added to cover the changes in this fix.

This fix is related to moby#23221 (UTF-8 BOM in Dockerfile).

Signed-off-by: Yong Tang <[email protected]>
  • Loading branch information
yongtang committed Jun 3, 2016
1 parent 678c80f commit ea86320
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
11 changes: 10 additions & 1 deletion builder/dockerignore/dockerignore.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dockerignore

import (
"bufio"
"bytes"
"fmt"
"io"
"path/filepath"
Expand All @@ -18,10 +19,18 @@ func ReadAll(reader io.ReadCloser) ([]string, error) {
defer reader.Close()
scanner := bufio.NewScanner(reader)
var excludes []string
currentLine := 0

utf8bom := []byte{0xEF, 0xBB, 0xBF}
for scanner.Scan() {
scannedBytes := scanner.Bytes()
// We trim UTF8 BOM
if currentLine == 0 {
scannedBytes = bytes.TrimPrefix(scannedBytes, utf8bom)
}
pattern := string(scannedBytes)
currentLine++
// Lines starting with # (comments) are ignored before processing
pattern := scanner.Text()
if strings.HasPrefix(pattern, "#") {
continue
}
Expand Down
24 changes: 24 additions & 0 deletions integration-cli/docker_cli_build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6805,3 +6805,27 @@ func (s *DockerSuite) TestBuildWithUTF8BOM(c *check.C) {
_, err = buildImageFromContext(name, ctx, true)
c.Assert(err, check.IsNil)
}

// Test case for UTF-8 BOM in .dockerignore, related to #23221
func (s *DockerSuite) TestBuildWithUTF8BOMDockerignore(c *check.C) {
name := "test-with-utf8-bom-dockerignore"
dockerfile := `
FROM busybox
ADD . /tmp/
RUN ls -la /tmp
RUN sh -c "! ls /tmp/Dockerfile"
RUN ls /tmp/.dockerignore`
dockerignore := []byte("./Dockerfile\n")
bomDockerignore := append([]byte{0xEF, 0xBB, 0xBF}, dockerignore...)
ctx, err := fakeContext(dockerfile, map[string]string{
"Dockerfile": dockerfile,
})
c.Assert(err, check.IsNil)
defer ctx.Close()
err = ctx.addFile(".dockerignore", bomDockerignore)
c.Assert(err, check.IsNil)
_, err = buildImageFromContext(name, ctx, true)
if err != nil {
c.Fatal(err)
}
}

0 comments on commit ea86320

Please sign in to comment.