]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/base32: make NoPadding Encoding's DecodedLen return exact size
authorGustav Westling <zegl@westling.xyz>
Thu, 6 Jul 2017 18:30:26 +0000 (20:30 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 6 Jul 2017 21:16:45 +0000 (21:16 +0000)
CL 47341 added support for decoding non-padded messages. But DecodedLen
still returned a multiple of 5 for messages without a padding, even
though it is possible to calculate the len exactly when using NoPadding.

This change makes DecodedLen return the exact number of bytes that
will be written. A change to the decoding logic is also made so that it
can handle this case.

DecodedLen now has the same behaviour as DecodedLen in encoding/base64.

Fixes #20854

Change-Id: I729e0b1c0946c866fb675c854f835f366dd4b5a4
Reviewed-on: https://go-review.googlesource.com/47710
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/encoding/base32/base32.go
src/encoding/base32/base32_test.go

index 0270e8f4d4031da95b70f061a47f47eba7df1d98..bf341b54f3d488646708a488891d3ea646fd0392 100644 (file)
@@ -341,7 +341,11 @@ func (enc *Encoding) decode(dst, src []byte) (n int, end bool, err error) {
                case 2:
                        dst[0] = dbuf[0]<<3 | dbuf[1]>>2
                }
-               dst = dst[5:]
+
+               if !end {
+                       dst = dst[5:]
+               }
+
                switch dlen {
                case 2:
                        n += 1
@@ -495,8 +499,7 @@ func NewDecoder(enc *Encoding, r io.Reader) io.Reader {
 // corresponding to n bytes of base32-encoded data.
 func (enc *Encoding) DecodedLen(n int) int {
        if enc.padChar == NoPadding {
-               // +6 represents the missing padding
-               return (n + 6) / 8 * 5
+               return n * 5 / 8
        }
 
        return n / 8 * 5
index 6fe292b476ebebb84d79581c1b4fccb86deeba64..56b229d15a6eee1bd45d43a4c440f79544e5235c 100644 (file)
@@ -551,13 +551,13 @@ func TestEncodedDecodedLen(t *testing.T) {
                }},
                {"NoPadding", StdEncoding.WithPadding(NoPadding), []test{
                        {0, 0, 0},
-                       {1, 2, 5},
-                       {2, 4, 5},
+                       {1, 2, 1},
+                       {2, 4, 2},
                        {5, 8, 5},
-                       {6, 10, 10},
-                       {7, 12, 10},
+                       {6, 10, 6},
+                       {7, 12, 7},
                        {10, 16, 10},
-                       {11, 18, 15},
+                       {11, 18, 11},
                }},
        } {
                t.Run(test.name, func(t *testing.T) {