diff --git a/internal/gateway/gateway.go b/internal/gateway/gateway.go index df5bffca..39c50605 100644 --- a/internal/gateway/gateway.go +++ b/internal/gateway/gateway.go @@ -2197,7 +2197,9 @@ func unsupportedOptionalField(fault any, field string) bool { var inner any dec := json.NewDecoder(strings.NewReader(rest[i:])) if dec.Decode(&inner) != nil { - break + // not JSON there ([HTTP 400]): look on past the bracket + rest = rest[i+1:] + continue } if hasOptionalErrorObject(inner) { return unsupportedOptionalField(inner, field) diff --git a/internal/gateway/optional_fields_test.go b/internal/gateway/optional_fields_test.go index 347f2fe3..64ff3c84 100644 --- a/internal/gateway/optional_fields_test.go +++ b/internal/gateway/optional_fields_test.go @@ -162,6 +162,8 @@ func TestRefusedOptionalNamesOnlyUnsupportedFields(t *testing.T) { {"mixed-array-input-echo", `[400,{"type":"dict_type","loc":["body","metadata"],"msg":"Input should be a valid dictionary","input":"Unknown name 'metadata': Cannot find field."}]`, 422, nil}, {"status-prefixed-extra", `[400] {"detail":[{"type":"extra_forbidden","loc":["body","store"],"msg":"Extra inputs are not permitted"}]}`, 400, []string{"store"}}, {"status-prefixed-input-echo", `[400] {"detail":[{"type":"dict_type","loc":["body","metadata"],"msg":"Input should be a valid dictionary","input":"Unknown name 'metadata': Cannot find field."}]}`, 400, nil}, + {"text-prefixed-extra", `[HTTP 400] {"detail":[{"type":"extra_forbidden","loc":["body","store"],"msg":"Extra inputs are not permitted"}]}`, 400, []string{"store"}}, + {"text-prefixed-input-echo", `[HTTP 400] {"detail":[{"type":"dict_type","loc":["body","metadata"],"msg":"Input should be a valid dictionary","input":"Unknown name 'metadata': Cannot find field."}]}`, 400, nil}, {"nested-extra", `{"detail":[{"type":"extra_forbidden","loc":["body","metadata","store"],"msg":"Extra inputs are not permitted"}]}`, 422, nil}, {"nested-unknown", `{"error":{"message":"Invalid JSON payload received. Unknown name \"store\" at 'metadata': Cannot find field."}}`, 400, nil}, {"other-parameter", `{"error":{"message":"'metadata' is unsupported","param":"model","code":"unsupported_value"}}`, 400, nil},