]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Replace strdup() calls for string_alloc() calls
authorSteffan Karger <steffan@karger.me>
Mon, 21 Sep 2015 18:48:33 +0000 (20:48 +0200)
committerGert Doering <gert@greenie.muc.de>
Sun, 4 Oct 2015 19:55:29 +0000 (21:55 +0200)
As reported by Bill Parker in trac #600, strdup() return values are not
always correctly checked for failed allocations.  This patch adds missing
checks by using string_alloc(), which performs the required checks.

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <561130FC.8090008@karger.me>
URL: http://article.gmane.org/gmane.network.openvpn.devel/10176
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/buffer.h
src/openvpn/cryptoapi.c
src/openvpn/init.c
src/openvpn/misc.c
src/openvpn/options.c
src/openvpn/ssl_polarssl.c

index 0dc511b0ff809b474b381a97482f9795b627d656..24f52aa389a0b6c120cb760b329e6187d0fbd379 100644 (file)
@@ -898,7 +898,7 @@ gc_reset (struct gc_arena *a)
 }
 
 static inline void
-check_malloc_return (void *p)
+check_malloc_return (const void *p)
 {
   if (!p)
     out_of_memory ();
index b7fc11e07016e1894aef02502b6e1c7259866cac..1d54ee7276a28e084d09c607774015b2d38d7be3 100644 (file)
@@ -46,6 +46,8 @@
 #include <ctype.h>
 #include <assert.h>
 
+#include "buffer.h"
+
 /* MinGW w32api 3.17 is still incomplete when it comes to CryptoAPI while
  * MinGW32-w64 defines all macros used. This is a hack around that problem.
  */
@@ -116,7 +118,7 @@ static char *ms_error_text(DWORD ms_err)
        (LPTSTR) &lpMsgBuf, 0, NULL);
     if (lpMsgBuf) {
        char *p;
-       rv = strdup(lpMsgBuf);
+       rv = string_alloc(lpMsgBuf, NULL);
        LocalFree(lpMsgBuf);
        /* trim to the left */
        if (rv)
index f568d8745f7b61b69d641af3316cda484a264faa..3decd2367c101c0cd4ee4c730bad0d5b38fd429b 100644 (file)
@@ -822,7 +822,7 @@ void
 init_options_dev (struct options *options)
 {
   if (!options->dev && options->dev_node) {
-    char *dev_node = strdup(options->dev_node); /* POSIX basename() implementaions may modify its arguments */
+    char *dev_node = string_alloc(options->dev_node, NULL); /* POSIX basename() implementaions may modify its arguments */
     options->dev = basename (dev_node);
   }
 }
index 895e9facf94a23b6ef389b1fee4219d1a60a0bc0..fd1930ae42aca686981a863db9bbd6fc2944a8f8 100644 (file)
@@ -1615,7 +1615,7 @@ argv_extract_cmd_name (const char *path)
 {
   if (path)
     {
-      char *path_cp = strdup(path); /* POSIX basename() implementaions may modify its arguments */
+      char *path_cp = string_alloc(path, NULL); /* POSIX basename() implementaions may modify its arguments */
       const char *bn = basename (path_cp);
       if (bn)
        {
index 5ace1f34710031f5b6986cbc9db1ba966dce5aa8..de4fa38ebe7fcc2b29d4e38637e4b2eb4f7bbb0b 100644 (file)
@@ -2578,7 +2578,7 @@ check_file_access(const int type, const char *file, const int mode, const char *
   /* Is the directory path leading to the given file accessible? */
   if (type & CHKACC_DIRPATH)
     {
-      char *fullpath = strdup(file);  /* POSIX dirname() implementaion may modify its arguments */
+      char *fullpath = string_alloc (file, NULL);  /* POSIX dirname() implementaion may modify its arguments */
       char *dirpath = dirname(fullpath);
 
       if (platform_access (dirpath, mode|X_OK) != 0)
index dd0fab0bd3395073544910fd2824bd0d733b91d9..11c9ffbc779cf506eebeba220e7830c971e5cf82 100644 (file)
@@ -197,7 +197,7 @@ tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char *ciphers)
 
   /* Parse allowed ciphers, getting IDs */
   i = 0;
-  tmp_ciphers_orig = tmp_ciphers = strdup(ciphers);
+  tmp_ciphers_orig = tmp_ciphers = string_alloc (ciphers, NULL);
 
   token = strtok (tmp_ciphers, ":");
   while(token)