forked from Mirrors/jsonapi
Fix issue #10 to avoid panics with invalid JSON
This commit is contained in:
parent
e93213ecfb
commit
b11e9985b4
|
@ -65,7 +65,13 @@ func UnmarshalPayload(in io.Reader, model interface{}) error {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalNode(data *Node, model reflect.Value, included *map[string]*Node) error {
|
func unmarshalNode(data *Node, model reflect.Value, included *map[string]*Node) (err error) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
err = fmt.Errorf("data is not a jsonapi representation of '%v'", model.Type())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
modelValue := model.Elem()
|
modelValue := model.Elem()
|
||||||
modelType := model.Type().Elem()
|
modelType := model.Type().Elem()
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -27,6 +28,17 @@ func TestMalformedTag(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalInvalidJSON(t *testing.T) {
|
||||||
|
in := strings.NewReader("{}")
|
||||||
|
out := new(Blog)
|
||||||
|
|
||||||
|
err := UnmarshalPayload(in, out)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("Did not error out the invalid JSON.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshalSetsId(t *testing.T) {
|
func TestUnmarshalSetsId(t *testing.T) {
|
||||||
in := samplePayloadWithId()
|
in := samplePayloadWithId()
|
||||||
out := new(Blog)
|
out := new(Blog)
|
||||||
|
|
Loading…
Reference in New Issue