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) | 	err := b.Bind(req, &obj) | ||||||
| 	assert.Error(t, err) | 	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{} | 	obj = protoexample.Test{} | ||||||
| 	req = requestWithBody("POST", badPath, badBody) | 	req = requestWithBody("POST", badPath, badBody) | ||||||
| 	req.Header.Add("Content-Type", MIMEPROTOBUF) | 	req.Header.Add("Content-Type", MIMEPROTOBUF) | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ | |||||||
| package binding | package binding | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"errors" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  |  | ||||||
| @ -26,7 +27,11 @@ func (b protobufBinding) Bind(req *http.Request, obj interface{}) error { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (protobufBinding) BindBody(body []byte, 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 | 		return err | ||||||
| 	} | 	} | ||||||
| 	// Here it's same to return validate(obj), but util now we can't add | 	// Here it's same to return validate(obj), but util now we can't add | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user