Merge pull request #22724 from netbox-community/22719-rest-api-returns-500-instead-of-a-validation-error-for

Fixes #22719: Correct malformed IP value validation
This commit is contained in:
bctiemann 2026-07-21 22:05:17 -04:00 committed by GitHub
commit e232ec00e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 28 additions and 2 deletions

View File

@ -20,7 +20,7 @@ class IPAddressField(serializers.CharField):
try:
return IPNetwork(data)
except AddrFormatError:
raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data))
raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data=data))
except (TypeError, ValueError) as e:
raise serializers.ValidationError(e)
@ -40,7 +40,7 @@ class IPNetworkField(serializers.CharField):
try:
return IPNetwork(data)
except AddrFormatError:
raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data))
raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data=data))
except (TypeError, ValueError) as e:
raise serializers.ValidationError(e)

View File

@ -452,6 +452,19 @@ class PrefixTestCase(APIViewTestCases.APIViewTestCase):
)
Prefix.objects.bulk_create(prefixes)
@tag('regression')
def test_create_with_invalid_prefix(self):
"""
POST of a malformed prefix value returns a 400 validation error.
"""
self.add_permissions('ipam.add_prefix')
url = reverse('ipam-api:prefix-list')
response = self.client.post(url, {'prefix': 'invalid'}, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.data['prefix'][0], 'Invalid IP prefix format: invalid')
@tag('regression')
def test_clean_validates_scope(self):
prefix = Prefix.objects.first()
@ -858,6 +871,19 @@ class IPAddressTestCase(APIViewTestCases.APIViewTestCase):
)
IPAddress.objects.bulk_create(ip_addresses)
@tag('regression')
def test_create_with_invalid_address(self):
"""
POST of a malformed address value returns a 400 validation error.
"""
self.add_permissions('ipam.add_ipaddress')
url = reverse('ipam-api:ipaddress-list')
response = self.client.post(url, {'address': 'invalid'}, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.data['address'][0], 'Invalid IP address format: invalid')
def test_assign_object(self):
"""
Test the creation of available IP addresses within a parent IP range.