diff options
author | HÃ¥vard Haugen <havard.haugen@gmail.com> | 2015-06-07 21:28:58 +0200 |
---|---|---|
committer | Adam Langley <agl@golang.org> | 2015-06-08 21:19:13 +0000 |
commit | 7089ea4e475a11beaed6837027b7f5254449989f (patch) | |
tree | 87def013acedd483bff00fd2b723e4e414f6f70b /src/encoding/pem | |
parent | 13e2412876fb43ed4ccfca380840cdf281984f98 (diff) | |
download | go-7089ea4e475a11beaed6837027b7f5254449989f.tar.gz go-7089ea4e475a11beaed6837027b7f5254449989f.zip |
testing/quick: probabilistically generate nil pointers
The documentation for quick.Value says that it "returns an arbitrary
value of the given type." In spite of this, nil values for pointers were
never generated, which seems more like an oversight than an intentional
choice.
The lack of nil values meant that testing recursive type like
type Node struct {
Next *Node
}
with testing/quick would lead to a stack overflow since the data
structure would never terminate.
This change may break tests that don't check for nil with pointers
returned from quick.Value. Two such instances were found in the standard
library, one of which was in the testing/quick package itself.
Fixes #8818.
Change-Id: Id390dcce649d12fbbaa801ce6f58f5defed77e60
Reviewed-on: https://go-review.googlesource.com/10821
Reviewed-by: Adam Langley <agl@golang.org>
Run-TryBot: Adam Langley <agl@golang.org>
Diffstat (limited to 'src/encoding/pem')
-rw-r--r-- | src/encoding/pem/pem_test.go | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/encoding/pem/pem_test.go b/src/encoding/pem/pem_test.go index 1913f44c1f..ab656c6261 100644 --- a/src/encoding/pem/pem_test.go +++ b/src/encoding/pem/pem_test.go @@ -146,7 +146,7 @@ func TestLineBreaker(t *testing.T) { } func TestFuzz(t *testing.T) { - testRoundtrip := func(block *Block) bool { + testRoundtrip := func(block Block) bool { for key := range block.Headers { if strings.Contains(key, ":") { // Keys with colons cannot be encoded. @@ -155,14 +155,14 @@ func TestFuzz(t *testing.T) { } var buf bytes.Buffer - err := Encode(&buf, block) + err := Encode(&buf, &block) decoded, rest := Decode(buf.Bytes()) switch { case err != nil: - t.Errorf("Encode of %#v resulted in error: %s", block, err) - case !reflect.DeepEqual(block, decoded): - t.Errorf("Encode of %#v decoded as %#v", block, decoded) + t.Errorf("Encode of %#v resulted in error: %s", &block, err) + case !reflect.DeepEqual(&block, decoded): + t.Errorf("Encode of %#v decoded as %#v", &block, decoded) case len(rest) != 0: t.Errorf("Encode of %#v decoded correctly, but with %x left over", block, rest) default: @@ -172,7 +172,7 @@ func TestFuzz(t *testing.T) { } // Explicitly test the empty block. - if !testRoundtrip(&Block{ + if !testRoundtrip(Block{ Type: "EMPTY", Headers: make(map[string]string), Bytes: []byte{}, |