fix: check obj type in protobufBinding (#2851)
* fix: check obj type in protobufBinding * fix: UnitTest for invalid proto obj
This commit is contained in:
		| @ -1339,6 +1339,13 @@ func testProtoBodyBindingFail(t *testing.T, b Binding, name, path, badPath, body | ||||
| 	err := b.Bind(req, &obj) | ||||
| 	assert.Error(t, err) | ||||
|  | ||||
| 	invalid_obj := FooStruct{} | ||||
| 	req.Body = ioutil.NopCloser(strings.NewReader(`{"msg":"hello"}`)) | ||||
| 	req.Header.Add("Content-Type", MIMEPROTOBUF) | ||||
| 	err = b.Bind(req, &invalid_obj) | ||||
| 	assert.Error(t, err) | ||||
| 	assert.Equal(t, err.Error(), "obj is not ProtoMessage") | ||||
|  | ||||
| 	obj = protoexample.Test{} | ||||
| 	req = requestWithBody("POST", badPath, badBody) | ||||
| 	req.Header.Add("Content-Type", MIMEPROTOBUF) | ||||
|  | ||||
| @ -5,6 +5,7 @@ | ||||
| package binding | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
|  | ||||
| @ -26,7 +27,11 @@ func (b protobufBinding) Bind(req *http.Request, obj interface{}) error { | ||||
| } | ||||
|  | ||||
| func (protobufBinding) BindBody(body []byte, obj interface{}) error { | ||||
| 	if err := proto.Unmarshal(body, obj.(proto.Message)); err != nil { | ||||
| 	msg, ok := obj.(proto.Message) | ||||
| 	if !ok { | ||||
| 		return errors.New("obj is not ProtoMessage") | ||||
| 	} | ||||
| 	if err := proto.Unmarshal(body, msg); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	// Here it's same to return validate(obj), but util now we can't add | ||||
|  | ||||
		Reference in New Issue
	
	Block a user