summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-09-15 19:00:25 (GMT)
committerBrad King <brad.king@kitware.com>2021-09-15 19:28:01 (GMT)
commit3cfd89add5551242e3d1b69aadd2c5733db4b96f (patch)
treef366e1225eb6697c7ca63aa7d173b8f2ee801b04
parent63b5a6869e1793e4aeb815f220dd41419344c802 (diff)
downloadCMake-3cfd89add5551242e3d1b69aadd2c5733db4b96f.zip
CMake-3cfd89add5551242e3d1b69aadd2c5733db4b96f.tar.gz
CMake-3cfd89add5551242e3d1b69aadd2c5733db4b96f.tar.bz2
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).
-rw-r--r--Source/cmCurl.cxx7
1 files changed, 6 insertions, 1 deletions
diff --git a/Source/cmCurl.cxx b/Source/cmCurl.cxx
index 7a6568e..fa001d2 100644
--- a/Source/cmCurl.cxx
+++ b/Source/cmCurl.cxx
@@ -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.