Patchwork [bitbake-devel,1/2] fetch2: improve handling of two classes of URL parameter mistakes

login
register
mail settings
Submitter Paul Eggleton
Date May 29, 2014, 5:17 p.m.
Message ID <35531b2a4dd2b386adb9598e53b46ceaa1f5ac22.1401383609.git.paul.eggleton@linux.intel.com>
Download mbox | patch
Permalink /patch/72967/
State New
Headers show

Comments

Paul Eggleton - May 29, 2014, 5:17 p.m.
Handle the following situations in a URL (e.g. in SRC_URI):

* Trailing semicolon in a URL - this is now ignored.
* Parameter specified with no value (no equals sign). This still
  produces an error, but at least it is MalformedUrl with a proper
  message rather than "ValueError: need more than 1 value to unpack".

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 lib/bb/fetch2/__init__.py | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Patch

diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py
index f571fc4..dcada12 100644
--- a/lib/bb/fetch2/__init__.py
+++ b/lib/bb/fetch2/__init__.py
@@ -56,8 +56,11 @@  class BBFetchException(Exception):
 
 class MalformedUrl(BBFetchException):
     """Exception raised when encountering an invalid url"""
-    def __init__(self, url):
-         msg = "The URL: '%s' is invalid and cannot be interpreted" % url
+    def __init__(self, url, message=''):
+         if message:
+             msg = message
+         else:
+             msg = "The URL: '%s' is invalid and cannot be interpreted" % url
          self.url = url
          BBFetchException.__init__(self, msg)
          self.args = (url,)
@@ -371,8 +374,11 @@  def decodeurl(url):
     p = {}
     if parm:
         for s in parm.split(';'):
-            s1, s2 = s.split('=')
-            p[s1] = s2
+            if s:
+                if not '=' in s:
+                    raise MalformedUrl(url, "The URL: '%s' is invalid: parameter %s does not specify a value (missing '=')" % (url, s))
+                s1, s2 = s.split('=')
+                p[s1] = s2
 
     return type, host, urllib.unquote(path), user, pswd, p