From 25647951087d8c8605c60d6231640ddb8acb614f Mon Sep 17 00:00:00 2001 From: Mark McLoughlin <markmc@redhat.com> Date: Sun, 18 Aug 2013 01:44:37 +0100 Subject: [PATCH] Fix transport URL parsing bug Handle e.g. foo://u:p@/bar. Right now we get: IndexError: string index out of range from: if hostname[0] == '[': Change-Id: I0bccebb14ad1d37862955e8988d160240bd1cf6d --- oslo/messaging/transport.py | 4 +++- tests/test_urls.py | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/oslo/messaging/transport.py b/oslo/messaging/transport.py index 8fdfca1f3..62a5480e3 100644 --- a/oslo/messaging/transport.py +++ b/oslo/messaging/transport.py @@ -386,7 +386,9 @@ class TransportURL(object): if ':' in username: username, password = username.split(':', 1) - if hostname[0] == '[': + if not hostname: + hostname = None + elif hostname.startswith('['): # Find the closing ']' and extract the hostname host_end = hostname.find(']') if host_end < 0: diff --git a/tests/test_urls.py b/tests/test_urls.py index a83ac400a..84f5a177a 100644 --- a/tests/test_urls.py +++ b/tests/test_urls.py @@ -78,6 +78,13 @@ class TestParseURL(test_utils.BaseTestCase): dict(host='host', port=1234, username='u', password='p'), ]))), + ('creds_no_host', + dict(url='foo://u:p@/bar', + expect=dict(transport='foo', + virtual_host='bar', + hosts=[ + dict(username='u', password='p'), + ]))), ('multi_host', dict(url='foo://u:p@host1:1234,host2:4321/bar', expect=dict(transport='foo',