func (enc *Encoding) decodeQuantum(dst, src []byte, si int) (nsi, n int, err error) {
// Decode quantum using the base64 alphabet
var dbuf [4]byte
- dinc, dlen := 3, 4
+ dlen := 4
for j := 0; j < len(dbuf); j++ {
if len(src) == si {
case j == 1, enc.padChar != NoPadding:
return si, 0, CorruptInputError(si - j)
}
- dinc, dlen = j-1, j
+ dlen = j
break
}
in := src[si]
// trailing garbage
err = CorruptInputError(si)
}
- dinc, dlen = 3, j
+ dlen = j
break
}
return si, 0, CorruptInputError(si - 2)
}
}
- dst = dst[dinc:]
return si, dlen - 1, err
}
"io"
"io/ioutil"
"reflect"
+ "runtime/debug"
"strings"
"testing"
"time"
}
}
+func TestDecodeBounds(t *testing.T) {
+ var buf [32]byte
+ s := StdEncoding.EncodeToString(buf[:])
+ defer func() {
+ if err := recover(); err != nil {
+ t.Fatalf("Decode panicked unexpectedly: %v\n%s", err, debug.Stack())
+ }
+ }()
+ n, err := StdEncoding.Decode(buf[:], []byte(s))
+ if n != len(buf) || err != nil {
+ t.Fatalf("StdEncoding.Decode = %d, %v, want %d, nil", n, err, len(buf))
+ }
+}
+
func TestEncodedLen(t *testing.T) {
for _, tt := range []struct {
enc *Encoding