]> www.infradead.org Git - users/dwmw2/openconnect.git/commitdiff
Fix memory leaks. openconnect__win32_strerror returns a malloc\'ed string
authorMarios Paouris <mspaourh@gmail.com>
Mon, 23 Sep 2024 06:12:27 +0000 (09:12 +0300)
committerMarios Paouris <mspaourh@gmail.com>
Tue, 5 Nov 2024 07:16:40 +0000 (09:16 +0200)
Signed-off-by: Marios Paouris <mspaourh@gmail.com>
tests/list-taps.c
tests/wintun-names.c
tun-win32.c

index 8482896e8fa9aca38d2c9dea965ae8dde0d93954..c63ab07dfe8492f50e89f066ded45c309bb2ad21 100644 (file)
@@ -31,7 +31,7 @@ struct openconnect_info {
 
 /* don't link linkopenconnect in this test, just for this function
  * it won't get loaded under wine when cross compiling anyway */
-#define openconnect__win32_strerror(err) "(Actual error text not present in tests)"
+#define openconnect__win32_strerror(err) (strdup("(Actual error text not present in tests)"))
 
 #define OPEN_TUN_SOFTFAIL 0
 #define OPEN_TUN_HARDFAIL -1
index 22430de463a5bb1308435bc001a32a1379938fb7..ab9a073b5f693cdf9009d6bee74a36c98f05665f 100644 (file)
@@ -47,7 +47,7 @@ struct openconnect_info {
 
 /* don't link linkopenconnect in this test, just for this function
  * it won't get loaded under wine when cross compiling anyway */
-#define openconnect__win32_strerror(err) "(Actual error text not present in tests)"
+#define openconnect__win32_strerror(err) (strdup("(Actual error text not present in tests)"))
 
 #define OPEN_TUN_SOFTFAIL 0
 #define OPEN_TUN_HARDFAIL -1
index 0a1d1436f2b702e336d534a7dba8081d00fec12a..c09756b274542e62ed9c1bd9a1935b129b13e96b 100644 (file)
@@ -164,9 +164,11 @@ static struct oc_adapter_info * get_adapter_list(struct openconnect_info *vpninf
                status = RegOpenKeyExA(HKEY_LOCAL_MACHINE, keyname, 0,
                                       KEY_QUERY_VALUE, &hkey);
                if (status) {
+                       char *errstr = openconnect__win32_strerror(status);
                        vpn_progress(vpninfo, PRG_TRACE,
                                _("Cannot open registry key %s: %s (%ld)\n"),
-                               keyname, openconnect__win32_strerror(status), status);
+                               keyname, errstr, status);
+                       free(errstr);
                        continue;
                }
 
@@ -185,9 +187,11 @@ static struct oc_adapter_info * get_adapter_list(struct openconnect_info *vpninf
                                        keyname, "ComponentId", type);
                        }
                        else {
+                               char *errstr = openconnect__win32_strerror(status);
                                vpn_progress(vpninfo, PRG_TRACE,
                                        _("Cannot read registry key %s\\%s or is not string: %s (%ld)\n"),
-                                       keyname, "ComponentId", openconnect__win32_strerror(status), status);
+                                       keyname, "ComponentId", errstr, status);
+                               free(errstr);
                        }
                        RegCloseKey(hkey);
                        continue;
@@ -248,9 +252,11 @@ static struct oc_adapter_info * get_adapter_list(struct openconnect_info *vpninf
                                        keyname, "Name", type);
                        }
                        else {
+                               char *errstr = openconnect__win32_strerror(status);
                                vpn_progress(vpninfo, PRG_INFO,
                                        _("Cannot read registry key %s\\%s: %s (%ld)\n"),
-                                       keyname, "Name", openconnect__win32_strerror(status), status);
+                                       keyname, "Name", errstr, status);
+                               free(errstr);
                        }
                        continue;
                }
@@ -374,6 +380,7 @@ static int check_address_conflicts(struct openconnect_info *vpninfo)
        if (LastError != ERROR_SUCCESS) {
                char *errstr = openconnect__win32_strerror(LastError);
                vpn_progress(vpninfo, PRG_ERR, _("GetAdaptersAddresses() failed: %s\n"), errstr);
+               free(errstr);
                ret = -EIO;
                goto out;
        }
@@ -425,6 +432,7 @@ static int check_address_conflicts(struct openconnect_info *vpninfo)
                                        if (LastError != ERROR_SUCCESS) {
                                                char *errstr = openconnect__win32_strerror(LastError);
                                                vpn_progress(vpninfo, PRG_ERR, _("GetUnicastIpAddressTable() failed: %s\n"), errstr);
+                                               free(errstr);
                                                ret = -EIO;
                                                goto out;
                                        }
@@ -446,6 +454,7 @@ static int check_address_conflicts(struct openconnect_info *vpninfo)
                                        if (LastError != NO_ERROR) {
                                                char *errstr = openconnect__win32_strerror(LastError);
                                                vpn_progress(vpninfo, PRG_ERR, _("DeleteUnicastIpAddressEntry() failed: %s\n"), errstr);
+                                               free(errstr);
                                                ret = -EIO;
                                                goto out;
                                        }