diff --git a/quantum/api/v2/attributes.py b/quantum/api/v2/attributes.py index 14496037d85..9b2c72a6cea 100644 --- a/quantum/api/v2/attributes.py +++ b/quantum/api/v2/attributes.py @@ -93,9 +93,18 @@ def _validate_range(data, valid_values=None): return msg +def _validate_no_whitespace(data): + """Validates that input has no whitespace.""" + if len(data.split()) > 1: + msg = _("'%s' contains whitespace") % data + LOG.debug(msg) + raise q_exc.InvalidInput(error_message=msg) + return data + + def _validate_mac_address(data, valid_values=None): try: - netaddr.EUI(data) + netaddr.EUI(_validate_no_whitespace(data)) except Exception: msg = _("'%s' is not a valid MAC address") % data LOG.debug(msg) @@ -104,7 +113,7 @@ def _validate_mac_address(data, valid_values=None): def _validate_ip_address(data, valid_values=None): try: - netaddr.IPAddress(data) + netaddr.IPAddress(_validate_no_whitespace(data)) except Exception: msg = _("'%s' is not a valid IP address") % data LOG.debug(msg) @@ -225,7 +234,7 @@ def _validate_ip_address_or_none(data, valid_values=None): def _validate_subnet(data, valid_values=None): try: - netaddr.IPNetwork(data) + netaddr.IPNetwork(_validate_no_whitespace(data)) if len(data.split('/')) == 2: return except Exception: diff --git a/quantum/tests/unit/test_attributes.py b/quantum/tests/unit/test_attributes.py index 76f99c96fb9..8ca9860b355 100644 --- a/quantum/tests/unit/test_attributes.py +++ b/quantum/tests/unit/test_attributes.py @@ -92,6 +92,19 @@ class TestAttributes(base.BaseTestCase): msg = attributes._validate_string("123456789", None) self.assertIsNone(msg) + def test_validate_no_whitespace(self): + data = 'no_white_space' + result = attributes._validate_no_whitespace(data) + self.assertEqual(result, data) + + self.assertRaises(q_exc.InvalidInput, + attributes._validate_no_whitespace, + 'i have whitespace') + + self.assertRaises(q_exc.InvalidInput, + attributes._validate_no_whitespace, + 'i\thave\twhitespace') + def test_validate_range(self): msg = attributes._validate_range(1, [1, 9]) self.assertIsNone(msg) @@ -135,6 +148,18 @@ class TestAttributes(base.BaseTestCase): msg = attributes._validate_ip_address(ip_addr) self.assertEqual(msg, "'%s' is not a valid IP address" % ip_addr) + ip_addr = '1.1.1.1 has whitespace' + msg = attributes._validate_ip_address(ip_addr) + self.assertEqual(msg, "'%s' is not a valid IP address" % ip_addr) + + ip_addr = '111.1.1.1\twhitespace' + msg = attributes._validate_ip_address(ip_addr) + self.assertEqual(msg, "'%s' is not a valid IP address" % ip_addr) + + ip_addr = '111.1.1.1\nwhitespace' + msg = attributes._validate_ip_address(ip_addr) + self.assertEqual(msg, "'%s' is not a valid IP address" % ip_addr) + def test_validate_ip_pools(self): pools = [[{'end': '10.0.0.254'}], [{'start': '10.0.0.254'}],