mirror of https://github.com/golang/go.git
go/build: correct shouldBuild bug reading whole contents of file.
It was caused by bytes.TrimSpace being able to return a nil slice. Fixes #3914. R=golang-dev, r CC=golang-dev, remy https://golang.org/cl/6458091
This commit is contained in:
parent
0f2529317f
commit
f087764abc
|
|
@ -689,7 +689,7 @@ func (ctxt *Context) shouldBuild(content []byte) bool {
|
|||
}
|
||||
line = bytes.TrimSpace(line)
|
||||
if len(line) == 0 { // Blank line
|
||||
end = cap(content) - cap(line) // &line[0] - &content[0]
|
||||
end = len(content) - len(p)
|
||||
continue
|
||||
}
|
||||
if !bytes.HasPrefix(line, slashslash) { // Not comment line
|
||||
|
|
|
|||
|
|
@ -75,3 +75,32 @@ func TestLocalDirectory(t *testing.T) {
|
|||
t.Fatalf("ImportPath=%q, want %q", p.ImportPath, "go/build")
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldBuild(t *testing.T) {
|
||||
const file1 = "// +build tag1\n\n" +
|
||||
"package main\n"
|
||||
|
||||
const file2 = "// +build cgo\n\n" +
|
||||
"// This package implements parsing of tags like\n" +
|
||||
"// +build tag1\n" +
|
||||
"package build"
|
||||
|
||||
const file3 = "// Copyright The Go Authors.\n\n" +
|
||||
"package build\n\n" +
|
||||
"// shouldBuild checks tags given by lines of the form\n" +
|
||||
"// +build tag\n" +
|
||||
"func shouldBuild(content []byte)\n"
|
||||
|
||||
ctx := &Context{BuildTags: []string{"tag1"}}
|
||||
if !ctx.shouldBuild([]byte(file1)) {
|
||||
t.Errorf("should not build file1, expected the contrary")
|
||||
}
|
||||
if ctx.shouldBuild([]byte(file2)) {
|
||||
t.Errorf("should build file2, expected the contrary")
|
||||
}
|
||||
|
||||
ctx = &Context{BuildTags: nil}
|
||||
if !ctx.shouldBuild([]byte(file3)) {
|
||||
t.Errorf("should not build file3, expected the contrary")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue