and this is a redirect */
uc = curl_url_get(u, CURLUPART_URL, &oldurl, flags);
if(!uc) {
- /* success, meaning the "" is a fine relative URL, but nothing
- changes */
+ /* success, meaning the "" is a fine relative URL, and the new URL
+ inherits scheme/authority/path/query, but not fragment, from the
+ existing URL (RFC 3986 section 5.2.2) */
+ curlx_safefree(u->fragment);
+ u->fragment_present = FALSE;
curlx_free(oldurl);
return CURLUE_OK;
}
"", /* blank redirect */
"https://example.com/",
0, 0, CURLUE_OK },
+ {"file:///test?test#test",
+ "", "file:///test?test",
+ 0, 0, CURLUE_OK},
+ {"https://example.com/path?query#frag",
+ "", "https://example.com/path?query",
+ 0, 0, CURLUE_OK},
+ {"ftp://example.com/dir/file#anchor",
+ "", "ftp://example.com/dir/file",
+ 0, 0, CURLUE_OK},
+ {"http://example.com/path#frag",
+ "", "http://example.com/path",
+ 0, 0, CURLUE_OK},
+ {"http://example.com/#frag",
+ "", "http://example.com/",
+ 0, 0, CURLUE_OK},
+ {"http://user:pass@example.com/path?query#frag",
+ "", "http://user:pass@example.com/path?query",
+ 0, 0, CURLUE_OK},
+ {"http://example.com:8080/path?query#frag",
+ "", "http://example.com:8080/path?query",
+ 0, 0, CURLUE_OK},
+ {"https://user:pass@example.com:8443/path?query#frag",
+ "", "https://user:pass@example.com:8443/path?query",
+ 0, 0, CURLUE_OK},
+ {"http://[::1]/path#frag",
+ "", "http://[::1]/path",
+ 0, 0, CURLUE_OK},
{"http://firstplace.example.com/want/1314",
"//somewhere.example.com/reply/1314",
"http://somewhere.example.com/reply/1314",