2
0
mirror of synced 2025-02-23 22:28:11 +00:00

bencode: Return ErrUnexpectedEOF instead of EOF in the middle of values

This commit is contained in:
Matt Joiner 2022-01-07 19:06:33 +11:00
parent 32097526fc
commit 071ade67ae

View File

@ -37,14 +37,21 @@ func (d *Decoder) Decode(v interface{}) (err error) {
return return
} }
r := recover() r := recover()
if r == nil {
return
}
_, ok := r.(runtime.Error) _, ok := r.(runtime.Error)
if ok { if ok {
panic(r) panic(r)
} }
err, ok = r.(error) if err, ok = r.(error); !ok {
if !ok && r != nil {
panic(r) panic(r)
} }
// Errors thrown from deeper in parsing are unexpected. At value boundaries, errors should
// be returned directly (at least until all the panic nonsense is removed entirely).
if err == io.EOF {
err = io.ErrUnexpectedEOF
}
}() }()
pv := reflect.ValueOf(v) pv := reflect.ValueOf(v)
@ -566,7 +573,7 @@ func (d *Decoder) parseValue(v reflect.Value) (bool, error) {
b, err := d.r.ReadByte() b, err := d.r.ReadByte()
if err != nil { if err != nil {
panic(err) return false, err
} }
d.Offset++ d.Offset++