Skip to content

Commit f2ff52a

Browse files
author
Mateus Franchini de Freitas
committed
urlValuesDecoder.DecodeObject: the key must match the param name before decoding a deepObject
1 parent f66e2a1 commit f2ff52a

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

openapi3filter/req_resp_decoder.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,10 @@ func (d *urlValuesDecoder) DecodeObject(param string, sm *openapi3.Serialization
650650
propsFn = func(params url.Values) (map[string]string, error) {
651651
props := make(map[string]string)
652652
for key, values := range params {
653+
if !regexp.MustCompile(fmt.Sprintf(`^%s\[`, regexp.QuoteMeta(param))).MatchString(key) {
654+
continue
655+
}
656+
653657
matches := regexp.MustCompile(`\[(.*?)\]`).FindAllStringSubmatch(key, -1)
654658
switch l := len(matches); {
655659
case l == 0:

openapi3filter/req_resp_decoder_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -998,6 +998,17 @@ func TestDecodeParameter(t *testing.T) {
998998
query: "anotherparam=bar",
999999
want: map[string]interface{}(nil),
10001000
},
1001+
{
1002+
name: "deepObject explode nested object - extraneous deep object param ignored",
1003+
param: &openapi3.Parameter{
1004+
Name: "param", In: "query", Style: "deepObject", Explode: explode,
1005+
Schema: objectOf(
1006+
"obj", objectOf("nestedObjOne", stringSchema, "nestedObjTwo", stringSchema),
1007+
),
1008+
},
1009+
query: "anotherparam[obj][nestedObjOne]=one&anotherparam[obj][nestedObjTwo]=two",
1010+
want: map[string]interface{}(nil),
1011+
},
10011012
{
10021013
name: "deepObject explode nested object - bad array item type",
10031014
param: &openapi3.Parameter{

0 commit comments

Comments
 (0)