From 0c8fe3463fe5dc49361d7fdcaa2a4d23a38c3151 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Mon, 6 Apr 2015 15:58:26 -0700 Subject: encoding/gob: more cleanups handling slice length Fix the other places the slice length was being believed, and refactor the code to use a single function to unify the check. Fixes #10273. Change-Id: Ia62b25203fbe87c95d71a70ebc1db8d202eaa4a4 Reviewed-on: https://go-review.googlesource.com/8511 Reviewed-by: Brad Fitzpatrick --- src/encoding/gob/encoder_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/encoding/gob/encoder_test.go') diff --git a/src/encoding/gob/encoder_test.go b/src/encoding/gob/encoder_test.go index 7607b17dee..b4c8675d34 100644 --- a/src/encoding/gob/encoder_test.go +++ b/src/encoding/gob/encoder_test.go @@ -968,3 +968,17 @@ func TestErrorBadDrop(t *testing.T) { t.Fatalf("decode: expected interface encoding error, got %s", err.Error()) } } + +// Don't crash, just give error with corrupted slice. +// Issue 10273. +func TestErrorBadSliceLength(t *testing.T) { + data := []byte{0x13, 0x0a, 0x00, 0xfb, 0x5d, 0xad, 0x0b, 0xf8, 0xff, 0x02, 0x02, 0x63, 0xe7, 0x00, 0x02, 0xfa, 0x28, 0x02, 0x02, 0x02, 0xa8, 0x98, 0x59} + d := NewDecoder(bytes.NewReader(data)) + err := d.Decode(nil) + if err == nil { + t.Fatal("decode: no error") + } + if !strings.Contains(err.Error(), "slice length too large") { + t.Fatalf("decode: expected slice length too large error, got %s", err.Error()) + } +} -- cgit v1.3