]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/rand: zero length reads shouldn't crash on Windows.
authorAdam Langley <agl@golang.org>
Mon, 10 Sep 2012 00:07:09 +0000 (20:07 -0400)
committerAdam Langley <agl@golang.org>
Mon, 10 Sep 2012 00:07:09 +0000 (20:07 -0400)
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 da091ba8c73ade461c2547342ef089de1a6a0a66..394fd450fe6c181bdf4d4e4bdaa3ccc04c96cedd 100644 (file)
@@ -30,3 +30,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)