diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-05-02 17:30:55 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-05-06 09:02:12 +0800 |
commit | a8f70e4bb930253065a0596a3b1f4d7894b074a9 (patch) | |
tree | 6f8e48412e9002f085405d176a489f49da96ece2 | |
parent | 9af0c65fa5ba9ae8527a70dbf0e808d777dfb479 (diff) | |
download | petitboot-a8f70e4bb930253065a0596a3b1f4d7894b074a9.zip petitboot-a8f70e4bb930253065a0596a3b1f4d7894b074a9.tar.gz |
lib/url: fix no-scheme URL parsing
We were incorrectly dropping the first strlen("file://") characters from
URLs with no scheme:
--- test/urls/data/localpath.test 2013-05-02 17:26:48.826359036 +0800
+++ /tmp/tmp.gn4JsWLw5o 2013-05-02 17:26:50.262364613 +0800
@@ -2,6 +2,6 @@
scheme file
host (null)
port (null)
-path /test/path/to/local/file
-dir /test/path/to/local/
+path ath/to/local/file
+dir ath/to/local/
file file
This change fixes the issue by indicating "no scheme found" by a NULL
return from pb_url_find_scheme, and hadling it appropriately. We add a
testcase too.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r-- | lib/url/url.c | 14 | ||||
-rw-r--r-- | test/urls/Makefile.am | 3 | ||||
-rw-r--r-- | test/urls/data/localpath.test | 7 |
3 files changed, 17 insertions, 7 deletions
diff --git a/lib/url/url.c b/lib/url/url.c index ae72b10..1e69774 100644 --- a/lib/url/url.c +++ b/lib/url/url.c @@ -129,9 +129,7 @@ static const struct pb_scheme_info *pb_url_find_scheme(const char *url) return scheme; } - /* Assume this is a non-url local file. */ - - return file_scheme; + return NULL; } static void pb_url_parse_path(struct pb_url *url) @@ -177,9 +175,13 @@ struct pb_url *pb_url_parse(void *ctx, const char *url_str) return NULL; si = pb_url_find_scheme(url_str); - - url->scheme = si->scheme; - p = url_str + si->str_len + strlen("://"); + if (si) { + url->scheme = si->scheme; + p = url_str + si->str_len + strlen("://"); + } else { + url->scheme = file_scheme->scheme; + p = url_str; + } url->full = talloc_strdup(url, url_str); diff --git a/test/urls/Makefile.am b/test/urls/Makefile.am index 2163018..da6fcbf 100644 --- a/test/urls/Makefile.am +++ b/test/urls/Makefile.am @@ -33,7 +33,8 @@ TESTS = data/double-slash.test \ data/http-simple.test \ data/join-full.test \ data/join-absolute.test \ - data/join-relative.test + data/join-relative.test \ + data/localpath.test TEST_EXTENSIONS = .test TEST_LOG_COMPILER = $(builddir)/run-url-test diff --git a/test/urls/data/localpath.test b/test/urls/data/localpath.test new file mode 100644 index 0000000..ffced1a --- /dev/null +++ b/test/urls/data/localpath.test @@ -0,0 +1,7 @@ +/test/path/to/local/file +scheme file +host (null) +port (null) +path /test/path/to/local/file +dir /test/path/to/local/ +file file |