mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
encoding/gob: ensure "duplicate type received" decoder errors surface up
Previously re-using a decoder with a new stream resulted in a confusing "extra data in buffer" error message. Change-Id: Ia4c4c3a2d4b63c59e37e53faa61a500d5ff6e5f1 Reviewed-on: https://go-review.googlesource.com/c/go/+/297949 Reviewed-by: Rob Pike <r@golang.org> Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Trust: Emmanuel Odeke <emmanuel@orijtech.com>
This commit is contained in:
parent
83e79c7b14
commit
b3235b75d1
2 changed files with 28 additions and 0 deletions
|
|
@ -152,6 +152,9 @@ func (dec *Decoder) decodeTypeSequence(isInterface bool) typeId {
|
|||
}
|
||||
// Type definition for (-id) follows.
|
||||
dec.recvType(-id)
|
||||
if dec.err != nil {
|
||||
break
|
||||
}
|
||||
// When decoding an interface, after a type there may be a
|
||||
// DelimitedValue still in the buffer. Skip its count.
|
||||
// (Alternatively, the buffer is empty and the byte count
|
||||
|
|
|
|||
|
|
@ -1127,3 +1127,28 @@ func TestBadData(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeErrorMultipleTypes(t *testing.T) {
|
||||
type Test struct {
|
||||
A string
|
||||
B int
|
||||
}
|
||||
var b bytes.Buffer
|
||||
NewEncoder(&b).Encode(Test{"one", 1})
|
||||
|
||||
var result, result2 Test
|
||||
dec := NewDecoder(&b)
|
||||
err := dec.Decode(&result)
|
||||
if err != nil {
|
||||
t.Errorf("decode: unexpected error %v", err)
|
||||
}
|
||||
|
||||
b.Reset()
|
||||
NewEncoder(&b).Encode(Test{"two", 2})
|
||||
err = dec.Decode(&result2)
|
||||
if err == nil {
|
||||
t.Errorf("decode: expected duplicate type error, got nil")
|
||||
} else if !strings.Contains(err.Error(), "duplicate type") {
|
||||
t.Errorf("decode: expected duplicate type error, got %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue