mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06:00
cmCurl: Fix file:// URLs with spaces for curl 7.78+
Since curl 7.78, URLs with spaces that are not encoded as `%20` or `+` are now correctly rejected with `CURLUE_MALFORMED_INPUT`. However, CMake has long accepted `file://` URLs with spaces in the path due to curl 7.77 and below accidentally allowing them. Preserve this by explicitly encoding spaces in such URLs before handing them to curl. See also upstream curl commit `b67d3ba73` (curl_url_set: reject spaces in URLs w/o CURLU_ALLOW_SPACE, 2021-05-31, curl-7_78_0~133).
This commit is contained in:
@@ -5,9 +5,9 @@
|
||||
#if !defined(CMAKE_USE_SYSTEM_CURL) && !defined(_WIN32) && \
|
||||
!defined(__APPLE__) && !defined(CURL_CA_BUNDLE) && !defined(CURL_CA_PATH)
|
||||
# define CMAKE_FIND_CAFILE
|
||||
# include "cmSystemTools.h"
|
||||
#endif
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
# include <vector>
|
||||
@@ -110,6 +110,11 @@ std::string cmCurlFixFileURL(std::string url)
|
||||
return url;
|
||||
}
|
||||
|
||||
// libcurl 7.77 and below accidentally allowed spaces in URLs in some cases.
|
||||
// One such case was file:// URLs, which CMake has long accepted as a result.
|
||||
// Explicitly encode spaces for a URL.
|
||||
cmSystemTools::ReplaceString(url, " ", "%20");
|
||||
|
||||
#if defined(_WIN32)
|
||||
// libcurl doesn't support file:// urls for unicode filenames on Windows.
|
||||
// Convert string from UTF-8 to ACP if this is a file:// URL.
|
||||
|
||||
Reference in New Issue
Block a user