What does 'go version' print?
go version go1.3 linux/amd64
What steps reproduce the problem?
1. Use a non-string key in a map to unmarshal into
Invalid conversion inside the encoding/json decoder. Resulting in a panic.
What should have happened instead?
No panic should've happened.
Please provide any additional information below.
There are two bugs in play here.
The first panic occurs because the check for a map[string]T does not exit the decoding
step when it doesn't hold. This is visible at
http://golang.org/src/pkg/encoding/json/decode.go#L481 and the break on this line should
be a return.
The second panic, the one shown to the user occurs because the encoding/json package
uses panics as a unwinding mechanism, and always expects the argument given to panic to
be an error. In the case of an unexpected panic which does not send an error type, the
type assertion on http://golang.org/src/pkg/encoding/json/decode.go#L137 fails and is
propagated to the package user.
I'm of the opinion that the type-assertion panic should not be fixed, since it will hide
implementation bugs such as these.
The text was updated successfully, but these errors were encountered: