diff options
author | Piotr JaroszyĆski <p.jaroszynski@gmail.com> | 2010-04-12 17:15:44 +0200 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2010-04-25 17:21:49 +0100 |
commit | 4cb0bfe2916eb4252a38bdb300fb59619c5d9f9b (patch) | |
tree | 100d72939b5527cb1e2c742a238fc321302ec10c /src/core/uri.c | |
parent | 132c391712b19fd76847f192d7523cf67d44f67f (diff) | |
download | ipxe-4cb0bfe2916eb4252a38bdb300fb59619c5d9f9b.zip ipxe-4cb0bfe2916eb4252a38bdb300fb59619c5d9f9b.tar.gz ipxe-4cb0bfe2916eb4252a38bdb300fb59619c5d9f9b.tar.bz2 |
[uri] Fix NULL dereference in parse_uri()
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>
Diffstat (limited to 'src/core/uri.c')
-rw-r--r-- | src/core/uri.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/core/uri.c b/src/core/uri.c index 57502f2..ff49e47 100644 --- a/src/core/uri.c +++ b/src/core/uri.c @@ -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] */ |