aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
Diffstat (limited to 'src/encoding')
-rw-r--r--src/encoding/hex/hex.go6
-rw-r--r--src/encoding/hex/hex_test.go7
2 files changed, 8 insertions, 5 deletions
diff --git a/src/encoding/hex/hex.go b/src/encoding/hex/hex.go
index 5a8243ae80..f69abb2f7f 100644
--- a/src/encoding/hex/hex.go
+++ b/src/encoding/hex/hex.go
@@ -75,9 +75,6 @@ func DecodedLen(x int) int { return x / 2 }
// If the input is malformed, Decode returns the number
// of bytes decoded before the error.
func Decode(dst, src []byte) (int, error) {
- if len(dst) < DecodedLen(len(src)) {
- return 0, errors.New("encoding/hex: output buffer too small")
- }
i, j := 0, 1
for ; j < len(src); j += 2 {
p := src[j-1]
@@ -91,6 +88,9 @@ func Decode(dst, src []byte) (int, error) {
if b > 0x0f {
return i, InvalidByteError(q)
}
+ if i >= len(dst) {
+ return i, errors.New("encoding/hex: output buffer too small")
+ }
dst[i] = (a << 4) | b
i++
}
diff --git a/src/encoding/hex/hex_test.go b/src/encoding/hex/hex_test.go
index 1eb169cdee..8d1ae70774 100644
--- a/src/encoding/hex/hex_test.go
+++ b/src/encoding/hex/hex_test.go
@@ -55,13 +55,16 @@ func TestDecode(t *testing.T) {
}
}
-func TestDecode_tooFewDstBytes(t *testing.T) {
+func TestDecodeDstTooSmall(t *testing.T) {
dst := make([]byte, 1)
src := []byte{'0', '1', '2', '3'}
- _, err := Decode(dst, src)
+ n, err := Decode(dst, src)
if err == nil {
t.Errorf("expected Decode to return an error, but it returned none")
}
+ if !bytes.Equal(dst[:n], []byte{0x01}) {
+ t.Errorf("output mismatch: got %x, want 01", dst[:n])
+ }
}
func TestEncodeToString(t *testing.T) {