From cd0ec70c952c439e3fdf271e14459ea0be88be6e Mon Sep 17 00:00:00 2001 From: Darja Shakhray Date: Tue, 15 Sep 2015 14:44:00 +0300 Subject: [PATCH] Fix 500 error when filtering by invalid version string Added checking the filter version pattern semver ApiImpact FastTrack Change-Id: Id3e55faa7fdb6c69cd482c8a6b5b7152fda7310c Closes-bug: #1491049 --- glance/api/v3/artifacts.py | 7 +++++++ glance/tests/functional/artifacts/test_artifacts.py | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/glance/api/v3/artifacts.py b/glance/api/v3/artifacts.py index c9fcb21f..720101f5 100644 --- a/glance/api/v3/artifacts.py +++ b/glance/api/v3/artifacts.py @@ -116,6 +116,13 @@ class ArtifactsController(object): filter['value'] = self._get_latest_version( req, filters['name'][0]['value'], type_name, type_version) + else: + try: + semantic_version.Version(filter['value'], partial=True) + except ValueError: + msg = (_('The format of the version %s is not valid. ' + 'Use semver notation') % filter['value']) + raise webob.exc.HTTPBadRequest(explanation=msg) res = artifact_repo.list(filters=filters, show_level=Showlevel.BASIC, diff --git a/glance/tests/functional/artifacts/test_artifacts.py b/glance/tests/functional/artifacts/test_artifacts.py index 7415224d..8bb7acc5 100644 --- a/glance/tests/functional/artifacts/test_artifacts.py +++ b/glance/tests/functional/artifacts/test_artifacts.py @@ -1874,3 +1874,12 @@ paste.filter_factory = glance.tests.utils:FakeAuthMiddleware.factory result = self._check_artifact_get(url=url)['artifacts'] self.assertEqual(1, len(result)) + + def test_filter_by_bad_version(self): + bad_versions = ['kkk', '1.k', 'h.0', '1.3.hf', 's.9.2s2'] + response_string = ('The format of the version %s is not valid. ' + 'Use semver notation') + for bad_version in bad_versions: + url = '/withprops/v1.0/drafts?version=gt:%s' % bad_version + result = self._check_artifact_get(url=url, status=400) + self.assertIn(response_string % bad_version, result)