]> Sergey Matveev's repositories - btrtrc.git/commitdiff
bencode: Improve unknown value type error
authorMatt Joiner <anacrolix@gmail.com>
Tue, 3 Nov 2015 12:21:10 +0000 (23:21 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 3 Nov 2015 12:21:10 +0000 (23:21 +1100)
bencode/decode.go

index f90783413172a1a7804a01694200e9e6dddecf7b..9cb2a0d65e453c51e610352a414dbd0f97302731 100644 (file)
@@ -4,6 +4,7 @@ import (
        "bufio"
        "bytes"
        "errors"
+       "fmt"
        "io"
        "math/big"
        "reflect"
@@ -371,11 +372,7 @@ func (d *decoder) read_one_value() bool {
                        break
                }
 
-               // unknown value
-               panic(&SyntaxError{
-                       Offset: d.offset - 1,
-                       What:   errors.New("unknown value type (invalid bencode?)"),
-               })
+               d.raiseUnknownValueType(b, d.offset-1)
        }
 
        return true
@@ -456,16 +453,20 @@ func (d *decoder) parse_value(v reflect.Value) bool {
                        break
                }
 
-               // unknown value
-               panic(&SyntaxError{
-                       Offset: d.offset - 1,
-                       What:   errors.New("unknown value type (invalid bencode?)"),
-               })
+               d.raiseUnknownValueType(b, d.offset-1)
        }
 
        return true
 }
 
+// An unknown bencode type character was encountered.
+func (d *decoder) raiseUnknownValueType(b byte, offset int64) {
+       panic(&SyntaxError{
+               Offset: offset,
+               What:   fmt.Errorf("unknown value type %+q", b),
+       })
+}
+
 func (d *decoder) parse_value_interface() (interface{}, bool) {
        b, err := d.ReadByte()
        if err != nil {
@@ -490,11 +491,8 @@ func (d *decoder) parse_value_interface() (interface{}, bool) {
                        return d.parse_string_interface(), true
                }
 
-               // unknown value
-               panic(&SyntaxError{
-                       Offset: d.offset - 1,
-                       What:   errors.New("unknown value type (invalid bencode?)"),
-               })
+               d.raiseUnknownValueType(b, d.offset-1)
+               panic("unreachable")
        }
 }