]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
urlapi: treat 0 alone as decimal number in IPv4 address
authorDaniel Stenberg <daniel@haxx.se>
Mon, 10 Mar 2025 12:42:42 +0000 (13:42 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 10 Mar 2025 16:10:23 +0000 (17:10 +0100)
Not as a broken octcal. Regression from b4538ec522

Extended test 1560 to verify this behavior.

Reported-by: Carlos Henrique Lima Melara
Closes #16652

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

index 30fe0ba8c73c90a429e2aa966df4fe0af0a39af7..7ad8a1fb2341ac41b1ce662ce5206dddb281dd84 100644 (file)
@@ -578,9 +578,8 @@ static int ipv4_normalize(struct dynbuf *host)
     int rc;
     curl_off_t l;
     if(*c == '0') {
-      c++;
-      if(*c == 'x') {
-        c++; /* skip the prefix */
+      if(c[1] == 'x') {
+        c += 2; /* skip the prefix */
         rc = Curl_str_hex(&c, &l, UINT_MAX);
       }
       else
index 75c96ad0b28e731bad4c487d45ee463c9d82b105..95971ec7a5b59547ab276787e1be197a1ee025d8 100644 (file)
@@ -529,6 +529,39 @@ static const struct testcase get_parts_list[] ={
 };
 
 static const struct urltestcase get_url_list[] = {
+  {"018.0.0.0", "http://018.0.0.0/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"08", "http://08/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0", "http://0.0.0.0/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"01", "http://0.0.0.1/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"02", "http://0.0.0.2/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"03", "http://0.0.0.3/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"04", "http://0.0.0.4/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"05", "http://0.0.0.5/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"06", "http://0.0.0.6/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"07", "http://0.0.0.7/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"07.1", "http://7.0.0.1/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"7.1", "http://7.0.0.1/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x7.1", "http://7.0.0.1/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x", "http://0x/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x1", "http://0.0.0.1/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x2", "http://0.0.0.2/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x3", "http://0.0.0.3/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x4", "http://0.0.0.4/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x5", "http://0.0.0.5/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x6", "http://0.0.0.6/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x7", "http://0.0.0.7/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x8", "http://0.0.0.8/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0x9", "http://0.0.0.9/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xa", "http://0.0.0.10/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xb", "http://0.0.0.11/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xc", "http://0.0.0.12/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xd", "http://0.0.0.13/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xe", "http://0.0.0.14/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xf", "http://0.0.0.15/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"0xg", "http://0xg/", CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+  {"https://0/", "https://0.0.0.0/", 0, 0, CURLUE_OK},
+  {"https://0.0x0/", "https://0.0.0.0/", 0, 0, CURLUE_OK},
+  {"https://0.000/", "https://0.0.0.0/", 0, 0, CURLUE_OK},
   {"example.com",
    "example.com/",
    CURLU_GUESS_SCHEME, CURLU_NO_GUESS_SCHEME, CURLUE_OK},