Skip to content

Commit ab430af

Browse files
dtkavhjacobs
authored andcommitted
Fixes #1020, OAS3 false positive for extra form param (#1124)
When using an OAS3 spec with formdata, the validation logic looks for the key 'formData' in the spec parameters list. This keys is specific to OAS2, and will never be present, causing any form data to throw an ExtraParameterProblem.
1 parent 1abab06 commit ab430af

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

connexion/decorators/validation.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,11 @@ def validate_query_parameter_list(self, request):
302302

303303
def validate_formdata_parameter_list(self, request):
304304
request_params = request.form.keys()
305-
spec_params = [x['name'] for x in self.parameters.get('formData', [])]
305+
try:
306+
spec_params = [x['name'] for x in self.parameters['formData']]
307+
except KeyError:
308+
# OAS 3
309+
return set()
306310
return validate_parameter_list(request_params, spec_params)
307311

308312
def validate_query_parameter(self, param, request):

tests/api/test_parameters.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ def test_strict_extra_query_param(strict_app):
117117
assert response['detail'] == "Extra query parameter(s) extra_parameter not in spec"
118118

119119

120+
def test_strict_formdata_param(strict_app):
121+
app_client = strict_app.app.test_client()
122+
headers = {'Content-type': 'application/x-www-form-urlencoded'}
123+
url = '/v1.0/test_array_csv_form_param'
124+
resp = app_client.post(url, headers=headers, data={"items":"mango"})
125+
response = json.loads(resp.data.decode('utf-8', 'replace'))
126+
assert response == ['mango']
127+
assert resp.status_code == 200
128+
129+
120130
def test_path_parameter_someint(simple_app):
121131
app_client = simple_app.app.test_client()
122132
resp = app_client.get('/v1.0/test-int-path/123') # type: flask.Response

0 commit comments

Comments
 (0)