Make it a runtime error to try and unmarshal into a value.

Thanks to Rob Pike for the suggestion and code.
This commit is contained in:
Jack Palevich 2010-01-07 12:11:33 +08:00
parent 0804ed1920
commit f980a9f931
2 changed files with 7 additions and 1 deletions

View file

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Represents JSON data structure using native Go types: booleans, floats,
// Represents bencode data structure using native Go types: booleans, floats,
// strings, arrays, and maps.
package bencode

View file

@ -279,6 +279,12 @@ func (b *structBuilder) Key(k string) Builder {
//
func Unmarshal(r io.Reader, val interface{}) (err os.Error) {
// If e represents a value, the answer won't get back to the
// caller. Make sure it's a pointer.
if _, ok := reflect.Typeof(val).(*reflect.PtrType); !ok {
err = os.ErrorString("Attempt to unmarshal into a non-pointer")
return
}
err = UnmarshalValue(r, reflect.NewValue(val))
return
}