validate_integer doesn't check non int properly

This fix corrects the integer type checking
by using is_int_like function.

Change-Id: Ib3979d35e165800cae2b97a7ce2b89f4113b0a79
Closes-Bug: #1666529
This commit is contained in:
nidhimittalhada 2017-03-24 18:34:37 +05:30
parent c85dcdbe21
commit 435284dd03
2 changed files with 21 additions and 16 deletions

View File

@ -1395,25 +1395,31 @@ class TestComparableMixin(test.TestCase):
self.one._compare(1, self.one._cmpkey))
@ddt.ddt
class TestValidateInteger(test.TestCase):
def test_validate_integer_greater_than_max_int_limit(self):
value = (2 ** 31) + 1
@ddt.data(
(2 ** 31) + 1, # More than max value
-12, # Less than min value
2.05, # Float value
"12.05", # Float value in string format
"should be int", # String
u"test" # String in unicode format
)
def test_validate_integer_raise_assert(self, value):
self.assertRaises(webob.exc.HTTPBadRequest,
utils.validate_integer,
value, 'limit', min_value=-1, max_value=(2 ** 31))
def test_validate_integer_less_than_min_int_limit(self):
value = -12
self.assertRaises(webob.exc.HTTPBadRequest,
utils.validate_integer,
value, 'limit', min_value=-1, max_value=(2 ** 31))
def test_validate_integer_invalid_limit(self):
value = "should_be_int"
self.assertRaises(webob.exc.HTTPBadRequest,
utils.validate_integer,
value, 'limit', min_value=-1, max_value=(2 ** 31))
@ddt.data(
"123", # integer in string format
123, # integer
u"123" # integer in unicode format
)
def test_validate_integer(self, value):
res = utils.validate_integer(value, 'limit', min_value=-1,
max_value=(2 ** 31))
self.assertEqual(123, res)
@ddt.ddt

View File

@ -1035,11 +1035,10 @@ def validate_integer(value, name, min_value=None, max_value=None):
:param max_length: the max_length of the integer
:returns: integer
"""
try:
value = int(value)
except (TypeError, ValueError, UnicodeEncodeError):
if not strutils.is_int_like(value):
raise webob.exc.HTTPBadRequest(explanation=(
_('%s must be an integer.') % name))
value = int(value)
if min_value is not None and value < min_value:
raise webob.exc.HTTPBadRequest(