Browse Source

Bugfix: extract_domain: Correctly handle query/fragment in URI without path

Reported by randy@miningrigrentals.com
Luke Dashjr 11 years ago
parent
commit
d59fdfe304
1 changed files with 15 additions and 3 deletions
  1. 15 3
      util.c

+ 15 - 3
util.c

@@ -1947,11 +1947,15 @@ const char *extract_domain(size_t * const out_domainlen, const char * const uri,
 			// part of the URI scheme, ignore it
 			while (p[0] == '/')
 				++p;
-			p = memchr(p, '/', urilen - (p - uri)) ?: &uri[urilen];
+			p = memchr(p, '/', urilen - (p - uri));
 		}
 	}
-	else
-		p = &uri[urilen];
+	if (!p)
+	{
+		p = memchr(uri, '?', urilen) ?:
+		    memchr(uri, '#', urilen) ?:
+		    &uri[urilen];
+	}
 	
 	s = p;
 	q = my_memrchr(uri, ':', p - uri);
@@ -2044,6 +2048,14 @@ void test_domain_funcs()
 	_test_extract_domain("s.m.eligius.st", "stratum+tcp://s.m.eligius.st.:3334///");
 	_test_extract_domain("s.m.eligius.st", "s.m.eligius.st:3334");
 	_test_extract_domain("s.m.eligius.st", "s.m.eligius.st:3334///");
+	_test_extract_domain("s.m.eligius.st", "http://s.m.eligius.st:3334#foo");
+	_test_extract_domain("s.m.eligius.st", "http://s.m.eligius.st:3334?foo");
+	_test_extract_domain("s.m.eligius.st", "http://s.m.eligius.st#foo");
+	_test_extract_domain("s.m.eligius.st", "http://s.m.eligius.st?foo");
+	_test_extract_domain("s.m.eligius.st", "s.m.eligius.st#foo");
+	_test_extract_domain("s.m.eligius.st", "s.m.eligius.st?foo");
+	_test_extract_domain("s.m.eligius.st", "s.m.eligius.st:3334#foo");
+	_test_extract_domain("s.m.eligius.st", "s.m.eligius.st:3334?foo");
 	_test_extract_domain("foohost", "foohost:3334");
 	_test_extract_domain("foohost", "foohost:3334///");
 	_test_extract_domain("foohost", "foohost:3334/abc.com//");