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