File curl-8.7.1-fix-finding-cacert.patch of Package mingw32-curl

diff -ur curl-8.7.1.orig/src/tool_doswin.c curl-8.7.1/src/tool_doswin.c
--- curl-8.7.1.orig/src/tool_doswin.c	2024-03-25 09:48:59.000000000 +0100
+++ curl-8.7.1/src/tool_doswin.c	2024-05-02 11:23:50.440109537 +0200
@@ -599,6 +599,25 @@
 
 #ifdef _WIN32
 
+static char *
+get_root_path(const char *root_path, int size)
+{
+  if (GetModuleFileName(NULL, root_path, size) == 0)
+    return NULL;
+  char *p = strstr(root_path, "\\bin\\");
+  if (p)
+    *p = '\0';
+  return root_path;
+}
+
+BOOL file_exists(LPCTSTR szPath)
+{
+  DWORD dwAttrib = GetFileAttributes(szPath);
+
+  return (dwAttrib != INVALID_FILE_ATTRIBUTES && 
+         !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
+}
+
 /*
  * Function to find CACert bundle on a Win32 platform using SearchPath.
  * (SearchPath is already declared via inclusions done in setup header file)
@@ -632,8 +651,23 @@
     TCHAR buf[PATH_MAX];
     TCHAR *ptr = NULL;
 
-    buf[0] = TEXT('\0');
+    if (get_root_path(buf, sizeof(buf))) {
+      if (strcat_s(buf, sizeof(buf), "/etc/pki/tls/certs/") ||
+          strcat_s(buf, sizeof(buf), bundle_file))
+        return CURLE_OUT_OF_MEMORY;
+      if (file_exists(buf)) {
+        char *mstr = curlx_convert_tchar_to_UTF8(buf);
+        Curl_safefree(config->cacert);
+        if(mstr)
+          config->cacert = strdup(mstr);
+        curlx_unicodefree(mstr);
+        if(!config->cacert)
+          result = CURLE_OUT_OF_MEMORY;
+        return result;
+      }
+    }
 
+    buf[0] = TEXT('\0');
     res_len = SearchPath(NULL, bundle_file, NULL, PATH_MAX, buf, &ptr);
     if(res_len > 0) {
       char *mstr = curlx_convert_tchar_to_UTF8(buf);
openSUSE Build Service is sponsored by