]> granicus.if.org Git - curl/commitdiff
Curl_follow: return better errors on URL problems
authorDaniel Stenberg <daniel@haxx.se>
Sun, 21 Oct 2018 22:09:49 +0000 (00:09 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 23 Oct 2018 09:43:41 +0000 (11:43 +0200)
... by making the converter function global and accessible.

Closes #3153

lib/transfer.c
lib/url.c
lib/url.h

index e6d98cfa495406ffd390cae64a5ddd1824dbf1aa..c7f4ef9f32de2bb4f0804374e4c019f23d4a1fad 100644 (file)
@@ -1516,13 +1516,11 @@ CURLcode Curl_follow(struct Curl_easy *data,
   DEBUGASSERT(data->state.uh);
   uc = curl_url_set(data->state.uh, CURLUPART_URL, newurl, 0);
   if(uc)
-    /* TODO: consider an error code remap here */
-    return CURLE_URL_MALFORMAT;
+    return Curl_uc_to_curlcode(uc);
 
   uc = curl_url_get(data->state.uh, CURLUPART_URL, &newurl, 0);
   if(uc)
-    /* TODO: consider an error code remap here */
-    return CURLE_OUT_OF_MEMORY;
+    return Curl_uc_to_curlcode(uc);
 
   if(type == FOLLOW_FAKE) {
     /* we're only figuring out the new url if we would've followed locations
index 0cc7d591aafe8617c4c450c3d19ca315c737ccf1..723b898065ee9b80419a6ec78049cf7a8d9d44b1 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -1996,7 +1996,7 @@ static CURLcode findprotocol(struct Curl_easy *data,
 }
 
 
-static CURLcode uc_to_curlcode(CURLUcode uc)
+CURLcode Curl_uc_to_curlcode(CURLUcode uc)
 {
   switch(uc) {
   default:
@@ -2048,11 +2048,11 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
                      CURLU_DISALLOW_USER : 0) |
                     (data->set.path_as_is ? CURLU_PATH_AS_IS : 0));
   if(uc)
-    return uc_to_curlcode(uc);
+    return Curl_uc_to_curlcode(uc);
 
   uc = curl_url_get(uh, CURLUPART_SCHEME, &data->state.up.scheme, 0);
   if(uc)
-    return uc_to_curlcode(uc);
+    return Curl_uc_to_curlcode(uc);
 
   result = findprotocol(data, conn, data->state.up.scheme);
   if(result)
@@ -2067,7 +2067,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
     conn->bits.user_passwd = TRUE;
   }
   else if(uc != CURLUE_NO_USER)
-    return uc_to_curlcode(uc);
+    return Curl_uc_to_curlcode(uc);
 
   uc = curl_url_get(uh, CURLUPART_PASSWORD, &data->state.up.password,
                     CURLU_URLDECODE);
@@ -2078,7 +2078,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
     conn->bits.user_passwd = TRUE;
   }
   else if(uc != CURLUE_NO_PASSWORD)
-    return uc_to_curlcode(uc);
+    return Curl_uc_to_curlcode(uc);
 
   uc = curl_url_get(uh, CURLUPART_OPTIONS, &data->state.up.options,
                     CURLU_URLDECODE);
@@ -2088,7 +2088,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
       return CURLE_OUT_OF_MEMORY;
   }
   else if(uc != CURLUE_NO_OPTIONS)
-    return uc_to_curlcode(uc);
+    return Curl_uc_to_curlcode(uc);
 
   uc = curl_url_get(uh, CURLUPART_HOST, &data->state.up.hostname, 0);
   if(uc) {
@@ -2098,7 +2098,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
 
   uc = curl_url_get(uh, CURLUPART_PATH, &data->state.up.path, 0);
   if(uc)
-    return uc_to_curlcode(uc);
+    return Curl_uc_to_curlcode(uc);
 
   uc = curl_url_get(uh, CURLUPART_PORT, &data->state.up.port,
                     CURLU_DEFAULT_PORT);
@@ -3082,12 +3082,12 @@ static CURLcode override_login(struct Curl_easy *data,
   if(user_changed) {
     uc = curl_url_set(data->state.uh, CURLUPART_USER, *userp, 0);
     if(uc)
-      return uc_to_curlcode(uc);
+      return Curl_uc_to_curlcode(uc);
   }
   if(passwd_changed) {
     uc = curl_url_set(data->state.uh, CURLUPART_PASSWORD, *passwdp, 0);
     if(uc)
-      return uc_to_curlcode(uc);
+      return Curl_uc_to_curlcode(uc);
   }
   return CURLE_OK;
 }
index 1c18f713783b8c2a675411c037995f3d471eb4fb..095d638331d5b643f8121359153ad9765955854a 100644 (file)
--- a/lib/url.h
+++ b/lib/url.h
@@ -50,6 +50,7 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data);
 void Curl_freeset(struct Curl_easy * data);
 /* free the URL pieces */
 void Curl_up_free(struct Curl_easy *data);
+CURLcode Curl_uc_to_curlcode(CURLUcode uc);
 CURLcode Curl_close(struct Curl_easy *data); /* opposite of curl_open() */
 CURLcode Curl_connect(struct Curl_easy *, struct connectdata **,
                       bool *async, bool *protocol_connect);