From: Daniel Stenberg Date: Thu, 5 Nov 2020 08:18:52 +0000 (+0100) Subject: url: make sure an HSTS upgrade updates URL and scheme correctly X-Git-Tag: curl-7_74_0~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20558ff269708bdc796558f7352fa95d82b9b55e;p=thirdparty%2Fcurl.git url: make sure an HSTS upgrade updates URL and scheme correctly Closes #6175 --- diff --git a/lib/url.c b/lib/url.c index b01d470e5a..381f98dc65 100644 --- a/lib/url.c +++ b/lib/url.c @@ -1922,8 +1922,26 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, #ifdef USE_HSTS if(data->hsts && strcasecompare("http", data->state.up.scheme)) { - if(Curl_hsts(data->hsts, data->state.up.hostname, TRUE)) - infof(data, "Switch from HTTP to HTTPS due to HSTS!\n"); + if(Curl_hsts(data->hsts, data->state.up.hostname, TRUE)) { + char *url; + Curl_safefree(data->state.up.scheme); + uc = curl_url_set(uh, CURLUPART_SCHEME, "https", 0); + if(uc) + return Curl_uc_to_curlcode(uc); + if(data->change.url_alloc) + Curl_safefree(data->change.url); + /* after update, get the updated version */ + uc = curl_url_get(uh, CURLUPART_URL, &url, 0); + if(uc) + return Curl_uc_to_curlcode(uc); + uc = curl_url_get(uh, CURLUPART_SCHEME, &data->state.up.scheme, 0); + if(uc) + return Curl_uc_to_curlcode(uc); + data->change.url = url; + data->change.url_alloc = TRUE; + infof(data, "Switched from HTTP to HTTPS due to HSTS => %s\n", + data->change.url); + } } #endif