summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/nsurl.c6
-rw-r--r--utils/nsurl.c7
2 files changed, 13 insertions, 0 deletions
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++;