]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1] crypto/rand: zero length reads shouldn't crash on Windows.
authorAdam Langley <agl@golang.org>
Fri, 21 Sep 2012 19:55:05 +0000 (05:55 +1000)
committerAdam Langley <agl@golang.org>
Fri, 21 Sep 2012 19:55:05 +0000 (05:55 +1000)
««« backport a69e30463bf4
crypto/rand: zero length reads shouldn't crash on Windows.

R=golang-dev, dave
CC=golang-dev
https://golang.org/cl/6496099

»»»

src/pkg/crypto/rand/rand_test.go
src/pkg/crypto/rand/rand_windows.go

index be3a5a221d7d8e61ed5ca39f754265d79885ad16..c5dbdb6cb8541d6617631d0ec70a21a86c9dc3ea 100644 (file)
@@ -29,3 +29,14 @@ func TestRead(t *testing.T) {
                t.Fatalf("Compressed %d -> %d", len(b), z.Len())
        }
 }
+
+func TestReadEmpty(t *testing.T) {
+       n, err := Reader.Read(make([]byte, 0))
+       if n != 0 || err != nil {
+               t.Fatalf("Read(make([]byte, 0)) = %d, %v", n, err)
+       }
+       n, err = Reader.Read(nil)
+       if n != 0 || err != nil {
+               t.Fatalf("Read(make(nil) = %d, %v", n, err)
+       }
+}
index 2b2bd4bba6b0e87dbdb1dc7fc2334cf83ce224f4..82b39b64a3c352e5f26e4d2bdc6e034a7b823a16 100644 (file)
@@ -35,6 +35,10 @@ func (r *rngReader) Read(b []byte) (n int, err error) {
                }
        }
        r.mu.Unlock()
+
+       if len(b) == 0 {
+               return 0, nil
+       }
        err = syscall.CryptGenRandom(r.prov, uint32(len(b)), &b[0])
        if err != nil {
                return 0, os.NewSyscallError("CryptGenRandom", err)