summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-05-02 17:30:55 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-05-06 09:02:12 +0800
commita8f70e4bb930253065a0596a3b1f4d7894b074a9 (patch)
tree6f8e48412e9002f085405d176a489f49da96ece2
parent9af0c65fa5ba9ae8527a70dbf0e808d777dfb479 (diff)
downloadtalos-petitboot-a8f70e4bb930253065a0596a3b1f4d7894b074a9.tar.gz
talos-petitboot-a8f70e4bb930253065a0596a3b1f4d7894b074a9.zip
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.c14
-rw-r--r--test/urls/Makefile.am3
-rw-r--r--test/urls/data/localpath.test7
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
OpenPOWER on IntegriCloud