Skip to content

Commit 7980281

Browse files
fischetmc
authored andcommitted
Return an error on invalid nested query parameters. (#329)
* Add some tests with invalid nested query paramters. * Return an error when an invalid nested field is passed in query parameters.
1 parent 0c0b378 commit 7980281

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

runtime/query.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ func populateFieldValueFromPath(msg proto.Message, fieldPath []string, values []
5656

5757
switch f.Kind() {
5858
case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64:
59+
if !isLast {
60+
return fmt.Errorf("unexpected nested field %s in %s", fieldPath[i+1], strings.Join(fieldPath[:i+1], "."))
61+
}
5962
m = f
6063
case reflect.Slice:
6164
// TODO(yugui) Support []byte

runtime/query_test.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,105 @@ func TestPopulateParametersWithFilters(t *testing.T) {
229229
}
230230
}
231231

232+
func TestPopulateQueryParametersWithInvalidNestedParameters(t *testing.T) {
233+
for _, spec := range []struct {
234+
msg proto.Message
235+
values url.Values
236+
filter *utilities.DoubleArray
237+
}{
238+
{
239+
msg: &proto3Message{},
240+
values: url.Values{
241+
"float_value.nested": {"test"},
242+
},
243+
filter: utilities.NewDoubleArray(nil),
244+
},
245+
{
246+
msg: &proto3Message{},
247+
values: url.Values{
248+
"double_value.nested": {"test"},
249+
},
250+
filter: utilities.NewDoubleArray(nil),
251+
},
252+
{
253+
msg: &proto3Message{},
254+
values: url.Values{
255+
"int64_value.nested": {"test"},
256+
},
257+
filter: utilities.NewDoubleArray(nil),
258+
},
259+
{
260+
msg: &proto3Message{},
261+
values: url.Values{
262+
"int32_value.nested": {"test"},
263+
},
264+
filter: utilities.NewDoubleArray(nil),
265+
},
266+
{
267+
msg: &proto3Message{},
268+
values: url.Values{
269+
"uint64_value.nested": {"test"},
270+
},
271+
filter: utilities.NewDoubleArray(nil),
272+
},
273+
{
274+
msg: &proto3Message{},
275+
values: url.Values{
276+
"uint32_value.nested": {"test"},
277+
},
278+
filter: utilities.NewDoubleArray(nil),
279+
},
280+
{
281+
msg: &proto3Message{},
282+
values: url.Values{
283+
"bool_value.nested": {"test"},
284+
},
285+
filter: utilities.NewDoubleArray(nil),
286+
},
287+
{
288+
msg: &proto3Message{},
289+
values: url.Values{
290+
"string_value.nested": {"test"},
291+
},
292+
filter: utilities.NewDoubleArray(nil),
293+
},
294+
{
295+
msg: &proto3Message{},
296+
values: url.Values{
297+
"repeated_value.nested": {"test"},
298+
},
299+
filter: utilities.NewDoubleArray(nil),
300+
},
301+
{
302+
msg: &proto3Message{},
303+
values: url.Values{
304+
"enum_value.nested": {"test"},
305+
},
306+
filter: utilities.NewDoubleArray(nil),
307+
},
308+
{
309+
msg: &proto3Message{},
310+
values: url.Values{
311+
"enum_value.nested": {"test"},
312+
},
313+
filter: utilities.NewDoubleArray(nil),
314+
},
315+
{
316+
msg: &proto3Message{},
317+
values: url.Values{
318+
"repeated_enum.nested": {"test"},
319+
},
320+
filter: utilities.NewDoubleArray(nil),
321+
},
322+
} {
323+
spec.msg.Reset()
324+
err := runtime.PopulateQueryParameters(spec.msg, spec.values, spec.filter)
325+
if err == nil {
326+
t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) did not fail; want error", spec.values, spec.filter)
327+
}
328+
}
329+
}
330+
232331
type proto3Message struct {
233332
Nested *proto2Message `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"`
234333
NestedNonNull proto2Message `protobuf:"bytes,11,opt,name=nested_non_null" json:"nested_non_null,omitempty"`

0 commit comments

Comments
 (0)