Skip to content

Commit 81c97ea

Browse files
committed
Fix Length validator incorrectly passing StringFields with field.data = None
1 parent b47e73d commit 81c97ea

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/wtforms/validators.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,11 @@ def __init__(self, min=-1, max=-1, message=None):
134134
self.field_flags["maxlength"] = self.max
135135

136136
def __call__(self, form, field):
137-
length = field.data and len(field.data) or 0
137+
if field.data is None:
138+
length = -1
139+
else:
140+
length = len(field.data)
141+
138142
if length >= self.min and (self.max == -1 or length <= self.max):
139143
return
140144

tests/validators/test_length.py

+30
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,33 @@ def test_length_messages(dummy_form, dummy_field, validator, message):
5757
validator(dummy_form, dummy_field)
5858

5959
assert message in str(e.value)
60+
61+
@pytest.mark.parametrize("min_v, max_v", [(-1, 5)])
62+
def test_null_str_pass(min_v, max_v, dummy_form, dummy_field):
63+
"""
64+
The null string (field not in submitted formdata, thus field.data is None)
65+
should pass when min=-1, ie no minimum required.
66+
"""
67+
dummy_field.data = None
68+
validator = length(min_v, max_v)
69+
validator(dummy_form, dummy_field)
70+
71+
@pytest.mark.parametrize("min_v, max_v", [(0, 5), (0, -1)])
72+
def test_null_str_fail(min_v, max_v, dummy_form, dummy_field):
73+
"""
74+
The null string (field not in submitted formdata, thus field.data is None)
75+
should fail when min=0
76+
"""
77+
dummy_field.data = None
78+
validator = length(min_v, max_v)
79+
with pytest.raises(ValidationError):
80+
validator(dummy_form, dummy_field)
81+
82+
@pytest.mark.parametrize("min_v, max_v", [(0, 5), (0, -1)])
83+
def test_empty_str_pass(min_v, max_v, dummy_form, dummy_field):
84+
"""
85+
The empty string ('') should pass when min=0
86+
"""
87+
dummy_field.data = ""
88+
validator = length(min_v, max_v)
89+
validator(dummy_form, dummy_field)

0 commit comments

Comments
 (0)