summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Muchka <36249295+Greg-Muchka@users.noreply.github.com>2021-06-15 18:12:49 -0600
committerDaniel Stenberg <daniel@haxx.se>2021-06-21 14:05:49 +0200
commit62be0960858f18798f5f2bf662cbfd9ae3948eb4 (patch)
tree21bbc30441d585da96b344097725801c9747dc6b
parent47386775ed53c0c4258ea9ec15d3499bb93a887f (diff)
downloadcurl-62be0960858f18798f5f2bf662cbfd9ae3948eb4.tar.gz
hostip: (macOS) free returned memory of SCDynamicStoreCopyProxies
From Apples documentation on SCDynamicStoreCopyProxies, "Return Value: A dictionary of key-value pairs that represent the current internet proxy settings, or NULL if no proxy settings have been defined or if an error occurred. You must release the returned value." Failure to release the returned value of SCDynamicStoreCopyProxies can result in a memory leak. Source: https://developer.apple.com/documentation/systemconfiguration/1517088-scdynamicstorecopyproxies Closes #7265
-rw-r--r--CMakeLists.txt27
-rw-r--r--lib/hostip.c25
-rw-r--r--m4/curl-sysconfig.m44
3 files changed, 30 insertions, 26 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf4f3c579..4badbe996 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -372,28 +372,29 @@ if(CMAKE_USE_DARWINSSL)
message(FATAL_ERROR "The cmake option CMAKE_USE_DARWINSSL was renamed to CMAKE_USE_SECTRANSP.")
endif()
-if(CMAKE_USE_SECTRANSP)
+if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
find_library(COREFOUNDATION_FRAMEWORK "CoreFoundation")
if(NOT COREFOUNDATION_FRAMEWORK)
message(FATAL_ERROR "CoreFoundation framework not found")
endif()
- find_library(SECURITY_FRAMEWORK "Security")
- if(NOT SECURITY_FRAMEWORK)
- message(FATAL_ERROR "Security framework not found")
- endif()
-
- set(SSL_ENABLED ON)
- set(USE_SECTRANSP ON)
- list(APPEND CURL_LIBS "-framework CoreFoundation" "-framework Security")
-endif()
-
-if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
find_library(SYSTEMCONFIGURATION_FRAMEWORK "SystemConfiguration")
if(NOT SYSTEMCONFIGURATION_FRAMEWORK)
message(FATAL_ERROR "SystemConfiguration framework not found")
endif()
- list(APPEND CURL_LIBS "-framework SystemConfiguration")
+
+ list(APPEND CURL_LIBS "-framework CoreFoundation" "-framework SystemConfiguration")
+
+ if(CMAKE_USE_SECTRANSP)
+ find_library(SECURITY_FRAMEWORK "Security")
+ if(NOT SECURITY_FRAMEWORK)
+ message(FATAL_ERROR "Security framework not found")
+ endif()
+
+ set(SSL_ENABLED ON)
+ set(USE_SECTRANSP ON)
+ list(APPEND CURL_LIBS "-framework Security")
+ endif()
endif()
if(CMAKE_USE_OPENSSL)
diff --git a/lib/hostip.c b/lib/hostip.c
index 2d6f500c6..737a2a784 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -579,7 +579,6 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
CURLcode result;
enum resolve_t rc = CURLRESOLV_ERROR; /* default to failure */
struct connectdata *conn = data->conn;
-
*entry = NULL;
conn->bits.doh = FALSE; /* default is not */
@@ -626,16 +625,20 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
}
#if defined(ENABLE_IPV6) && defined(CURL_OSX_CALL_COPYPROXIES)
- /*
- * The automagic conversion from IPv4 literals to IPv6 literals only works
- * if the SCDynamicStoreCopyProxies system function gets called first. As
- * Curl currently doesn't support system-wide HTTP proxies, we therefore
- * don't use any value this function might return.
- *
- * This function is only available on a macOS and is not needed for
- * IPv4-only builds, hence the conditions above.
- */
- SCDynamicStoreCopyProxies(NULL);
+ {
+ /*
+ * The automagic conversion from IPv4 literals to IPv6 literals only
+ * works if the SCDynamicStoreCopyProxies system function gets called
+ * first. As Curl currently doesn't support system-wide HTTP proxies, we
+ * therefore don't use any value this function might return.
+ *
+ * This function is only available on a macOS and is not needed for
+ * IPv4-only builds, hence the conditions above.
+ */
+ CFDictionaryRef dict = SCDynamicStoreCopyProxies(NULL);
+ if(dict)
+ CFRelease(dict);
+ }
#endif
#ifndef USE_RESOLVE_ON_IPS
diff --git a/m4/curl-sysconfig.m4 b/m4/curl-sysconfig.m4
index 0f6462fab..0af96ba93 100644
--- a/m4/curl-sysconfig.m4
+++ b/m4/curl-sysconfig.m4
@@ -21,7 +21,7 @@
#***************************************************************************
AC_DEFUN([CURL_DARWIN_SYSTEMCONFIGURATION], [
-AC_MSG_CHECKING([whether to link macOS SystemConfiguration framework])
+AC_MSG_CHECKING([whether to link macOS CoreFoundation and SystemConfiguration framework])
case $host_os in
darwin*)
AC_COMPILE_IFELSE([
@@ -41,7 +41,7 @@ case $host_os in
])
if test "x$build_for_macos" != xno; then
AC_MSG_RESULT(yes)
- LDFLAGS="$LDFLAGS -framework SystemConfiguration"
+ LDFLAGS="$LDFLAGS -framework CoreFoundation -framework SystemConfiguration"
else
AC_MSG_RESULT(no)
fi