aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Chestnykh <dchest@gmail.com>2012-04-04 09:52:42 -0400
committerRuss Cox <rsc@golang.org>2012-04-04 09:52:42 -0400
commitd98b9dac03eda5db7352a0fa634a29162226bfea (patch)
tree0b3141470b074148e857ca3de8c25f6dbacb20e8
parentca246227a8d4123f4b66e0b6ae91ebdc37114343 (diff)
downloadgo-d98b9dac03eda5db7352a0fa634a29162226bfea.tar.gz
go-d98b9dac03eda5db7352a0fa634a29162226bfea.zip
[release-branch.go1] encoding/ascii85: fix panic caused by special case
««« backport b127df6df1ab encoding/ascii85: fix panic caused by special case Special case for encoding 4 zeros as 'z' didn't update source slice, causing 'index out of bounds' panic in destination slice. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/5970078 »»»
-rw-r--r--src/pkg/encoding/ascii85/ascii85.go1
-rw-r--r--src/pkg/encoding/ascii85/ascii85_test.go5
2 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/encoding/ascii85/ascii85.go b/src/pkg/encoding/ascii85/ascii85.go
index 7d004b5e5d..705022792a 100644
--- a/src/pkg/encoding/ascii85/ascii85.go
+++ b/src/pkg/encoding/ascii85/ascii85.go
@@ -57,6 +57,7 @@ func Encode(dst, src []byte) int {
if v == 0 && len(src) >= 4 {
dst[0] = 'z'
dst = dst[1:]
+ src = src[4:]
n++
continue
}
diff --git a/src/pkg/encoding/ascii85/ascii85_test.go b/src/pkg/encoding/ascii85/ascii85_test.go
index 70e67d8b06..42cf7e80e1 100644
--- a/src/pkg/encoding/ascii85/ascii85_test.go
+++ b/src/pkg/encoding/ascii85/ascii85_test.go
@@ -28,6 +28,11 @@ var pairs = []testpair{
"l(DId<j@<?3r@:F%a+D58'ATD4$Bl@l3De:,-DJs`8ARoFb/0JMK@qB4^F!,R<AKZ&-DfTqBG%G\n" +
">uD.RTpAKYo'+CT/5+Cei#DII?(E,9)oF*2M7/c\n",
},
+ // Special case when shortening !!!!! to z.
+ {
+ "\000\000\000\000",
+ "z",
+ },
}
var bigtest = pairs[len(pairs)-1]