]> granicus.if.org Git - curl/commitdiff
url: a short host name + port is not a scheme
authorDaniel Stenberg <daniel@haxx.se>
Fri, 2 Nov 2018 22:46:01 +0000 (23:46 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 3 Nov 2018 14:01:27 +0000 (15:01 +0100)
The function identifying a leading "scheme" part of the URL considered a few
letters ending with a colon to be a scheme, making something like "short:80"
to become an unknown scheme instead of a short host name and a port number.

Extended test 1560 to verify.

Reported-by: Hagai Auro
Fixes #3220
Closes #3223

lib/urlapi.c
tests/libtest/lib1560.c

index 18a6076fff45635f6fbf780a5e07f8eb07a4def7..e877dc726149ee47196753b99febcc75f2b3ec2b 100644 (file)
@@ -238,7 +238,7 @@ bool Curl_is_absolute_url(const char *url, char *buf, size_t buflen)
 #endif
   for(i = 0; i < buflen && url[i]; ++i) {
     char s = url[i];
-    if(s == ':') {
+    if((s == ':') && (url[i + 1] == '/')) {
       if(buf)
         buf[i] = 0;
       return TRUE;
index 57469a9063d6a531f88363e3f2ee475937cf91b4..6557e0567049d4dd1448f5e58a3892c832ec75e5 100644 (file)
@@ -128,6 +128,9 @@ struct querycase {
 };
 
 static struct testcase get_parts_list[] ={
+  {"boing:80",
+   "https | [11] | [12] | [13] | boing | 80 | / | [16] | [17]",
+   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
   {"http://[fd00:a41::50]:8080",
    "http | [11] | [12] | [13] | [fd00:a41::50] | 8080 | / | [16] | [17]",
    CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},