diff options
author | Rob Pike <r@golang.org> | 2009-07-29 17:24:25 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2009-07-29 17:24:25 -0700 |
commit | 366097e51c9ae0f67c1900b0cedb927cfdce6460 (patch) | |
tree | b0645453b9deaaa7ee30bfb7ebe7afd2993c41dc /src/pkg/gob/codec_test.go | |
parent | 53abf93013954216d6521b5a10a2202f7d7bcb36 (diff) | |
download | golang-366097e51c9ae0f67c1900b0cedb927cfdce6460.tar.gz |
handle unsupported types safely.
R=rsc
DELTA=154 (71 added, 6 deleted, 77 changed)
OCL=32483
CL=32492
Diffstat (limited to 'src/pkg/gob/codec_test.go')
-rw-r--r-- | src/pkg/gob/codec_test.go | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/pkg/gob/codec_test.go b/src/pkg/gob/codec_test.go index 8263a9286..9ad3b4727 100644 --- a/src/pkg/gob/codec_test.go +++ b/src/pkg/gob/codec_test.go @@ -564,7 +564,7 @@ func TestEndToEnd(t *testing.T) { b := new(bytes.Buffer); encode(b, t1); var _t1 T1; - decode(b, getTypeInfo(reflect.Typeof(_t1)).id, &_t1); + decode(b, getTypeInfoNoError(reflect.Typeof(_t1)).id, &_t1); if !reflect.DeepEqual(t1, &_t1) { t.Errorf("encode expected %v got %v", *t1, _t1); } @@ -580,7 +580,7 @@ func TestOverflow(t *testing.T) { } var it inputT; var err os.Error; - id := getTypeInfo(reflect.Typeof(it)).id; + id := getTypeInfoNoError(reflect.Typeof(it)).id; b := new(bytes.Buffer); // int8 @@ -733,7 +733,7 @@ func TestNesting(t *testing.T) { b := new(bytes.Buffer); encode(b, rt); var drt RT; - decode(b, getTypeInfo(reflect.Typeof(drt)).id, &drt); + decode(b, getTypeInfoNoError(reflect.Typeof(drt)).id, &drt); if drt.a != rt.a { t.Errorf("nesting: encode expected %v got %v", *rt, drt); } @@ -775,7 +775,7 @@ func TestAutoIndirection(t *testing.T) { b := new(bytes.Buffer); encode(b, t1); var t0 T0; - t0Id := getTypeInfo(reflect.Typeof(t0)).id; + t0Id := getTypeInfoNoError(reflect.Typeof(t0)).id; decode(b, t0Id, &t0); if t0.a != 17 || t0.b != 177 || t0.c != 1777 || t0.d != 17777 { t.Errorf("t1->t0: expected {17 177 1777 17777}; got %v", t0); @@ -800,7 +800,7 @@ func TestAutoIndirection(t *testing.T) { b.Reset(); encode(b, t0); t1 = T1{}; - t1Id := getTypeInfo(reflect.Typeof(t1)).id; + t1Id := getTypeInfoNoError(reflect.Typeof(t1)).id; decode(b, t1Id, &t1); if t1.a != 17 || *t1.b != 177 || **t1.c != 1777 || ***t1.d != 17777 { t.Errorf("t0->t1 expected {17 177 1777 17777}; got {%d %d %d %d}", t1.a, *t1.b, **t1.c, ***t1.d); @@ -810,7 +810,7 @@ func TestAutoIndirection(t *testing.T) { b.Reset(); encode(b, t0); t2 = T2{}; - t2Id := getTypeInfo(reflect.Typeof(t2)).id; + t2Id := getTypeInfoNoError(reflect.Typeof(t2)).id; decode(b, t2Id, &t2); if ***t2.a != 17 || **t2.b != 177 || *t2.c != 1777 || t2.d != 17777 { t.Errorf("t0->t2 expected {17 177 1777 17777}; got {%d %d %d %d}", ***t2.a, **t2.b, *t2.c, t2.d); @@ -848,7 +848,7 @@ func TestReorderedFields(t *testing.T) { rt0.c = 3.14159; b := new(bytes.Buffer); encode(b, rt0); - rt0Id := getTypeInfo(reflect.Typeof(rt0)).id; + rt0Id := getTypeInfoNoError(reflect.Typeof(rt0)).id; var rt1 RT1; // Wire type is RT0, local type is RT1. decode(b, rt0Id, &rt1); @@ -886,7 +886,7 @@ func TestIgnoredFields(t *testing.T) { b := new(bytes.Buffer); encode(b, it0); - rt0Id := getTypeInfo(reflect.Typeof(it0)).id; + rt0Id := getTypeInfoNoError(reflect.Typeof(it0)).id; var rt1 RT1; // Wire type is IT0, local type is RT1. err := decode(b, rt0Id, &rt1); @@ -897,3 +897,20 @@ func TestIgnoredFields(t *testing.T) { t.Errorf("rt1->rt0: expected %v; got %v", it0, rt1); } } + +type Bad0 struct { + inter interface{}; + c float; +} + +func TestInvalidField(t *testing.T) { + var bad0 Bad0; + bad0.inter = 17; + b := new(bytes.Buffer); + err := encode(b, &bad0); + if err == nil { + t.Error("expected error; got none") + } else if strings.Index(err.String(), "interface") < 0 { + t.Error("expected type error; got", err) + } +} |