]> Cypherpunks repositories - gostls13.git/commitdiff
encoding: fix endless loop in TestDecoderBuffering
authorMark Ryan <mark.d.ryan@intel.com>
Fri, 16 Jun 2017 10:34:28 +0000 (11:34 +0100)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 16 Jun 2017 14:53:17 +0000 (14:53 +0000)
The ascii85, base32 and base64 packages all contain a test called
TestDecoderBuffering.  Each of these tests contain a loop that ignores
the error returned from the Read method of their decoders.  The result
being that the tests loop for ever if the decoders actually return an
error.  This commit fixes the issue by terminating the loops if an error
occurs and failing the tests with a suitable error message.

Change-Id: Idb385673cf9f3f6f8befe4288b4be366ab0985fd
Reviewed-on: https://go-review.googlesource.com/46010
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/encoding/ascii85/ascii85_test.go
src/encoding/base32/base32_test.go
src/encoding/base64/base64_test.go

index ba85b64156c7ee3a7d5937b0ba48634fe85f9c78..b8be9608632088b228926039ac9fd96db9e44098 100644 (file)
@@ -135,11 +135,15 @@ func TestDecoderBuffering(t *testing.T) {
                decoder := NewDecoder(strings.NewReader(bigtest.encoded))
                buf := make([]byte, len(bigtest.decoded)+12)
                var total int
-               for total = 0; total < len(bigtest.decoded); {
-                       n, err := decoder.Read(buf[total : total+bs])
-                       testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, error(nil))
+               var n int
+               var err error
+               for total = 0; total < len(bigtest.decoded) && err == nil; {
+                       n, err = decoder.Read(buf[total : total+bs])
                        total += n
                }
+               if err != nil && err != io.EOF {
+                       t.Errorf("Read from %q at pos %d = %d, unexpected error %v", bigtest.encoded, total, n, err)
+               }
                testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded)
        }
 }
index 12256d08ee8b56f4f624e0c3122a6e5d915e88a2..ee7525c997c11cc7977e94dbc88bfbb958e5f0d4 100644 (file)
@@ -284,11 +284,15 @@ func TestDecoderBuffering(t *testing.T) {
                decoder := NewDecoder(StdEncoding, strings.NewReader(bigtest.encoded))
                buf := make([]byte, len(bigtest.decoded)+12)
                var total int
-               for total = 0; total < len(bigtest.decoded); {
-                       n, err := decoder.Read(buf[total : total+bs])
-                       testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, error(nil))
+               var n int
+               var err error
+               for total = 0; total < len(bigtest.decoded) && err == nil; {
+                       n, err = decoder.Read(buf[total : total+bs])
                        total += n
                }
+               if err != nil && err != io.EOF {
+                       t.Errorf("Read from %q at pos %d = %d, unexpected error %v", bigtest.encoded, total, n, err)
+               }
                testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded)
        }
 }
index 59818d3775735d1d875f9a698170f2ced2f98fe9..05011fbdf38d8fd48728c3d4f41201d7c53f447b 100644 (file)
@@ -189,11 +189,15 @@ func TestDecoderBuffering(t *testing.T) {
                decoder := NewDecoder(StdEncoding, strings.NewReader(bigtest.encoded))
                buf := make([]byte, len(bigtest.decoded)+12)
                var total int
-               for total = 0; total < len(bigtest.decoded); {
-                       n, err := decoder.Read(buf[total : total+bs])
-                       testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, error(nil))
+               var n int
+               var err error
+               for total = 0; total < len(bigtest.decoded) && err == nil; {
+                       n, err = decoder.Read(buf[total : total+bs])
                        total += n
                }
+               if err != nil && err != io.EOF {
+                       t.Errorf("Read from %q at pos %d = %d, unexpected error %v", bigtest.encoded, total, n, err)
+               }
                testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded)
        }
 }