From a8f70e4bb930253065a0596a3b1f4d7894b074a9 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Thu, 2 May 2013 17:30:55 +0800 Subject: 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 --- lib/url/url.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib') 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); -- cgit v1.2.1