From 10529a01fd8b0d5cc07eb3f6aa00a0272597684b Mon Sep 17 00:00:00 2001 From: Gustav Westling Date: Wed, 9 May 2018 19:05:46 +0000 Subject: [PATCH] encoding/base32: handle NoPadding when using buffered encoding in Close This changes makes encoder.Close aware of how many bytes to write if there is any data left in the buffer. Fixes #25295 Change-Id: I4138891359935509cb561c453b8059ba2b9e576b GitHub-Last-Rev: f374096d2f3cae8635506074f59e1cd440c14844 GitHub-Pull-Request: golang/go#25316 Reviewed-on: https://go-review.googlesource.com/112515 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/encoding/base32/base32.go | 3 ++- src/encoding/base32/base32_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/encoding/base32/base32.go b/src/encoding/base32/base32.go index f3430654e1..09e90eab5f 100644 --- a/src/encoding/base32/base32.go +++ b/src/encoding/base32/base32.go @@ -244,8 +244,9 @@ func (e *encoder) Close() error { // If there's anything left in the buffer, flush it out if e.err == nil && e.nbuf > 0 { e.enc.Encode(e.out[0:], e.buf[0:e.nbuf]) + encodedLen := e.enc.EncodedLen(e.nbuf) e.nbuf = 0 - _, e.err = e.w.Write(e.out[0:8]) + _, e.err = e.w.Write(e.out[0:encodedLen]) } return e.err } diff --git a/src/encoding/base32/base32_test.go b/src/encoding/base32/base32_test.go index 094ac288d6..fdd862dc49 100644 --- a/src/encoding/base32/base32_test.go +++ b/src/encoding/base32/base32_test.go @@ -658,3 +658,31 @@ func TestEncodedDecodedLen(t *testing.T) { }) } } + +func TestWithoutPaddingClose(t *testing.T) { + encodings := []*Encoding{ + StdEncoding, + StdEncoding.WithPadding(NoPadding), + } + + for _, encoding := range encodings { + for _, testpair := range pairs { + + var buf bytes.Buffer + encoder := NewEncoder(encoding, &buf) + encoder.Write([]byte(testpair.decoded)) + encoder.Close() + + expected := testpair.encoded + if encoding.padChar == NoPadding { + expected = strings.Replace(expected, "=", "", -1) + } + + res := buf.String() + + if res != expected { + t.Errorf("Expected %s got %s; padChar=%d", expected, res, encoding.padChar) + } + } + } +} -- 2.50.0