From: Dave Cheney Date: Tue, 3 Apr 2012 02:14:02 +0000 (+1000) Subject: [release-branch.go1] encoding/base64: fix panic when input len is not a multiple... X-Git-Tag: go1.0.1~48 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=eacdcccb9efcc5d9bd76329c7bcc8328244e6f31;p=gostls13.git [release-branch.go1] encoding/base64: fix panic when input len is not a multiple of 4 ««« backport 95e67cc5fa08 encoding/base64: fix panic when input len is not a multiple of 4 Fixes #3442. R=for.go.yong, dsymonds, sougou, minux.ma, rsc CC=golang-dev https://golang.org/cl/5975052 »»» --- diff --git a/src/pkg/encoding/base64/base64.go b/src/pkg/encoding/base64/base64.go index 55f9f67a43..f8a51a4e75 100644 --- a/src/pkg/encoding/base64/base64.go +++ b/src/pkg/encoding/base64/base64.go @@ -230,7 +230,12 @@ func (enc *Encoding) decode(dst, src []byte) (n int, end bool, err error) { if in == '=' && j >= 2 && len(src) < 4 { // We've reached the end and there's // padding + if len(src) == 0 && j == 2 { + // not enough padding + return n, false, CorruptInputError(len(osrc)) + } if len(src) > 0 && src[0] != '=' { + // incorrect padding return n, false, CorruptInputError(len(osrc) - len(src) - 1) } dlen = j diff --git a/src/pkg/encoding/base64/base64_test.go b/src/pkg/encoding/base64/base64_test.go index 3e9a84393b..9c35372598 100644 --- a/src/pkg/encoding/base64/base64_test.go +++ b/src/pkg/encoding/base64/base64_test.go @@ -151,6 +151,9 @@ func TestDecodeCorrupt(t *testing.T) { {"AAA=AAAA", 3}, {"AAAAA", 4}, {"AAAAAA", 4}, + {"A=", 1}, + {"AA=", 3}, + {"AAAAAA=", 7}, } for _, e := range examples {