From 8b7a830c047e112b3004f4949a5b857371368508 Mon Sep 17 00:00:00 2001 From: Eoghan Glynn Date: Thu, 29 Mar 2012 17:39:11 +0100 Subject: [PATCH] Reject excessively long image names. Fixes bug 966240 Image names longer than 255 characters are rejected with 400 BadRequest on creation or update. Change-Id: I460ffee547496829cbf198b50bca564978abe7f3 --- glance/registry/db/api.py | 5 +++ glance/tests/unit/test_clients.py | 51 +++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/glance/registry/db/api.py b/glance/registry/db/api.py index e133d57932..c2e393a187 100644 --- a/glance/registry/db/api.py +++ b/glance/registry/db/api.py @@ -465,6 +465,11 @@ def validate_image(values): "and disk formats must match.") raise exception.Invalid(msg) + name = values.get('name') + if name and len(name) > 255: + msg = _('Image name too long: %d') % len(name) + raise exception.Invalid(msg) + def _image_update(context, values, image_id, purge_props=False): """ diff --git a/glance/tests/unit/test_clients.py b/glance/tests/unit/test_clients.py index 12b8384ef5..e8e71defb2 100644 --- a/glance/tests/unit/test_clients.py +++ b/glance/tests/unit/test_clients.py @@ -1061,6 +1061,57 @@ class TestRegistryClient(base.IsolatedUnitTest): self.client.add_image, fixture) + def test_add_image_with_acceptably_long_name(self): + """Tests adding image with acceptably long name""" + name = 'x' * 255 + fixture = {'name': name, + 'is_public': True, + 'disk_format': 'vmdk', + 'container_format': 'ovf', + 'size': 19, + 'location': "file:///tmp/glance-tests/2", + } + + new_image = self.client.add_image(fixture) + + data = self.client.get_image(new_image['id']) + self.assertEquals(name, data['name']) + + def test_add_image_with_excessively_long_name(self): + """Tests adding image with excessively long name""" + name = 'x' * 256 + fixture = {'name': name, + 'is_public': True, + 'disk_format': 'vmdk', + 'container_format': 'ovf', + 'size': 19, + 'location': "file:///tmp/glance-tests/2", + } + + self.assertRaises(exception.Invalid, + self.client.add_image, + fixture) + + def test_update_image_with_acceptably_long_name(self): + """Tests updating image with acceptably long name""" + name = 'x' * 255 + fixture = {'name': name} + + self.assertTrue(self.client.update_image(UUID2, fixture)) + + data = self.client.get_image(UUID2) + self.assertEquals(name, data['name']) + + def test_update_image_with_excessively_long_name(self): + """Tests updating image with excessively long name""" + name = 'x' * 256 + fixture = {'name': name} + + self.assertRaises(exception.Invalid, + self.client.update_image, + UUID2, + fixture) + def test_update_image(self): """Tests that the /images PUT registry API updates the image""" fixture = {'name': 'fake public image #2',