From feb1c4788d7399dfafa7e7f82903d12ef9dbc998 Mon Sep 17 00:00:00 2001 From: Jonathon Jongsma Date: Tue, 15 Sep 2009 14:54:02 -0500 Subject: Fix exception when parsing an alias as a url In BugHandle.parse(), we first try to parse the bug reference as a url and then fall back to interpreting it as an alias from the config file. Unfortunately, something like "gnome:123456" gets parsed as a url (with a scheme of 'gnome' and a path of '123456', and no hostname). This resulted in us passing a None hostname to tracker_get_auth_user(), which resulted in an uncaught exception. From now on, only proceed with treating the bug reference as a url if the scheme is parsed as 'http' or 'https'. --- git-bz | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/git-bz b/git-bz index 8f9e8dc..2edb3f5 100755 --- a/git-bz +++ b/git-bz @@ -399,28 +399,29 @@ class BugHandle: def parse(bug_reference): parseresult = urlparse.urlsplit (bug_reference) - user = parseresult.username - pwd = parseresult.password - # if the url did not specify http auth credentials in the form - # https://user:pwd@host.com, check to see whether the config file - # specifies any auth credentials for this host - if not user: - user = tracker_get_auth_user(parseresult.hostname) - if not pwd: - pwd = tracker_get_auth_password(parseresult.hostname) - - # strip off everything after the last '/', so '/bugzilla/show_bug.cgi' - # will simply become '/bugzilla' - path = parseresult.path[:parseresult.path.rfind('/')] - m = re.match("id=([^&]+)", parseresult.query) - - if m: - return BugHandle(host=parseresult.hostname, - path=path, - https=parseresult.scheme=="https", - id=m.group(1), - authuser=user, - authpwd=pwd) + if parseresult.scheme in ('http', 'https'): + user = parseresult.username + pwd = parseresult.password + # if the url did not specify http auth credentials in the form + # https://user:pwd@host.com, check to see whether the config file + # specifies any auth credentials for this host + if not user: + user = tracker_get_auth_user(parseresult.hostname) + if not pwd: + pwd = tracker_get_auth_password(parseresult.hostname) + + # strip off everything after the last '/', so '/bugzilla/show_bug.cgi' + # will simply become '/bugzilla' + path = parseresult.path[:parseresult.path.rfind('/')] + m = re.match("id=([^&]+)", parseresult.query) + + if m: + return BugHandle(host=parseresult.hostname, + path=path, + https=parseresult.scheme=="https", + id=m.group(1), + authuser=user, + authpwd=pwd) colon = bug_reference.find(":") if colon > 0: -- cgit v1.2.3