]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[uri] Fix NULL dereference in parse_uri()
authorPiotr Jaroszyński <p.jaroszynski@gmail.com>
Mon, 12 Apr 2010 15:15:44 +0000 (17:15 +0200)
committerMichael Brown <mcb30@ipxe.org>
Sun, 25 Apr 2010 16:21:49 +0000 (17:21 +0100)
Don't try to parse authority if it's not there.

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/uri.c

index 57502f26ec5baf25071e37f56e57e14f7387ec33..ff49e47a534b421b6ea6e04210959aaecf3f158b 100644 (file)
@@ -74,8 +74,8 @@ struct uri * parse_uri ( const char *uri_string ) {
        struct uri *uri;
        char *raw;
        char *tmp;
-       char *path = NULL;
-       char *authority = NULL;
+       char *path;
+       char *authority;
        int i;
        size_t raw_len;
 
@@ -110,6 +110,7 @@ struct uri * parse_uri ( const char *uri_string ) {
                } else {
                        /* Absolute URI with opaque part */
                        uri->opaque = tmp;
+                       path = NULL;
                }
        } else {
                /* Relative URI */
@@ -148,8 +149,15 @@ struct uri * parse_uri ( const char *uri_string ) {
        } else {
                /* Absolute/relative path */
                uri->path = path;
+               authority = NULL;
        }
 
+       /* If we don't have an authority (i.e. we have a non-net
+        * path), we're already finished processing
+        */
+       if ( ! authority )
+               goto done;
+
        /* Split authority into user[:password] and host[:port] portions */
        if ( ( tmp = strchr ( authority, '@' ) ) ) {
                /* Has user[:password] */