Skip to content

Commit 10529a0

Browse files
zeglianlancetaylor
authored andcommitted
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 golang#25295 Change-Id: I4138891359935509cb561c453b8059ba2b9e576b GitHub-Last-Rev: f374096 GitHub-Pull-Request: golang#25316 Reviewed-on: https://go-review.googlesource.com/112515 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
1 parent 0f2d4d0 commit 10529a0

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/encoding/base32/base32.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,9 @@ func (e *encoder) Close() error {
244244
// If there's anything left in the buffer, flush it out
245245
if e.err == nil && e.nbuf > 0 {
246246
e.enc.Encode(e.out[0:], e.buf[0:e.nbuf])
247+
encodedLen := e.enc.EncodedLen(e.nbuf)
247248
e.nbuf = 0
248-
_, e.err = e.w.Write(e.out[0:8])
249+
_, e.err = e.w.Write(e.out[0:encodedLen])
249250
}
250251
return e.err
251252
}

src/encoding/base32/base32_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,3 +658,31 @@ func TestEncodedDecodedLen(t *testing.T) {
658658
})
659659
}
660660
}
661+
662+
func TestWithoutPaddingClose(t *testing.T) {
663+
encodings := []*Encoding{
664+
StdEncoding,
665+
StdEncoding.WithPadding(NoPadding),
666+
}
667+
668+
for _, encoding := range encodings {
669+
for _, testpair := range pairs {
670+
671+
var buf bytes.Buffer
672+
encoder := NewEncoder(encoding, &buf)
673+
encoder.Write([]byte(testpair.decoded))
674+
encoder.Close()
675+
676+
expected := testpair.encoded
677+
if encoding.padChar == NoPadding {
678+
expected = strings.Replace(expected, "=", "", -1)
679+
}
680+
681+
res := buf.String()
682+
683+
if res != expected {
684+
t.Errorf("Expected %s got %s; padChar=%d", expected, res, encoding.padChar)
685+
}
686+
}
687+
}
688+
}

0 commit comments

Comments
 (0)