From 9ab851a5a9f951a8d2e7e285489245bee2cd0303 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 2 Nov 2012 10:54:34 +0000 Subject: Fix join with rel part of " ". Add a few tests. --- test/nsurl.c | 6 ++++++ utils/nsurl.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/test/nsurl.c b/test/nsurl.c index 20109f8fb..66bc05780 100644 --- a/test/nsurl.c +++ b/test/nsurl.c @@ -136,6 +136,12 @@ static const struct test_pairs join_tests[] = { { "http://", "http:" }, { "http:/", "http:" }, { "http:", "http:" }, + { " ", "http://a/b/c/d;p?q" }, + { " ", "http://a/b/c/d;p?q" }, + { "/", "http://a/" }, + { " / ", "http://a/" }, + { " ? ", "http://a/b/c/d;p?" }, + { " h ", "http://a/b/c/h" }, /* [1] Extra slash beyond rfc3986 5.4.1 example, since we're * testing normalisation in addition to joining */ /* [2] Using the strict parsers option */ diff --git a/utils/nsurl.c b/utils/nsurl.c index 8c525452a..18577b65d 100644 --- a/utils/nsurl.c +++ b/utils/nsurl.c @@ -264,6 +264,13 @@ static void nsurl__get_string_markers(const char * const url_s, marker.scheme_end = marker.authority = marker.colon_first = marker.at = marker.colon_last = marker.path = marker.start; + if (*pos == '\0') { + /* Nothing but whitespace, early exit */ + marker.query = marker.fragment = marker.end = marker.path; + *markers = marker; + return; + } + /* Get scheme */ if (isalpha(*pos)) { pos++; -- cgit v1.2.3