Skip to content

Commit edc1da3

Browse files
committed
Added a validation step for SearchablePersonField, to avoid later server 500 errors on bad input.
- Legacy-Id: 16433
1 parent 159dc69 commit edc1da3

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

ietf/person/fields.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
# Copyright The IETF Trust 2012-2019, All Rights Reserved
2+
# -*- coding: utf-8 -*-
3+
14
import json
25
import six
36

47
from collections import Counter
58
from urllib import urlencode
69

7-
from django.utils.html import escape
810
from django import forms
11+
from django.core.validators import validate_email
912
from django.urls import reverse as urlreverse
13+
from django.utils.html import escape
1014

1115
import debug # pyflakes:ignore
1216

@@ -70,6 +74,16 @@ def __init__(self,
7074
def parse_select2_value(self, value):
7175
return [x.strip() for x in value.split(",") if x.strip()]
7276

77+
def check_pks(self, pks):
78+
if self.model == Person:
79+
for pk in pks:
80+
if not pk.isdigit():
81+
raise forms.ValidationError("Unexpected value: %s" % pk)
82+
elif self.model == Email:
83+
for pk in pks:
84+
validate_email(pk)
85+
return pks
86+
7387
def prepare_value(self, value):
7488
if not value:
7589
value = ""
@@ -99,7 +113,7 @@ def prepare_value(self, value):
99113

100114
def clean(self, value):
101115
value = super(SearchablePersonsField, self).clean(value)
102-
pks = self.parse_select2_value(value)
116+
pks = self.check_pks(self.parse_select2_value(value))
103117

104118
objs = self.model.objects.filter(pk__in=pks)
105119
if self.model == Email:

0 commit comments

Comments
 (0)