Blame SOURCES/net-snmp-5.5-extend-realloc-leak.patch

8a419f
978384 - possible memory leak while realocking extend.c:1364
8a419f
8a419f
commit 55605ee3452aef5aabe4ed15a83374a97728e64a
8a419f
Author: Jan Safranek <jsafranek@users.sourceforge.net>
8a419f
Date:   Wed Jan 9 09:26:56 2013 +0100
8a419f
8a419f
    Fixed memory leak on failed realloc.
8a419f
8a419f
diff -up net-snmp-5.7.2/agent/mibgroup/agent/extend.c.orig net-snmp-5.7.2/agent/mibgroup/agent/extend.c
8a419f
--- net-snmp-5.7.2/agent/mibgroup/agent/extend.c.orig	2013-06-26 15:50:15.000000000 +0200
8a419f
+++ net-snmp-5.7.2/agent/mibgroup/agent/extend.c	2013-06-26 15:55:09.839899740 +0200
8a419f
@@ -1457,17 +1457,26 @@ handle_nsExtendOutput2Table(netsnmp_mib_
8a419f
 char * _get_cmdline(netsnmp_extend *extend)
8a419f
 {
8a419f
     size_t          size;
8a419f
+    char           *args = extend->args;
8a419f
+    char           *newbuf;
8a419f
+   
8a419f
+    if (args == NULL)
8a419f
+        /* Use empty string for processes without arguments. */
8a419f
+        args = "";
8a419f
     
8a419f
     size = strlen(extend->command) + strlen(extend->args) + 2;
8a419f
     if (size > cmdlinesize) {
8a419f
-        cmdlinebuf = realloc(cmdlinebuf, size);
8a419f
-	if (!cmdlinebuf) {
8a419f
+        newbuf = realloc(cmdlinebuf, size);
8a419f
+	if (!newbuf) {
8a419f
+            free(cmdlinebuf);
8a419f
+            cmdlinebuf = NULL;
8a419f
             cmdlinesize = 0;
8a419f
             return NULL;
8a419f
-	}
8a419f
-	cmdlinesize = size;
8a419f
+        }
8a419f
+        cmdlinesize = size;
8a419f
+        cmdlinebuf = newbuf;
8a419f
     }
8a419f
-    sprintf(cmdlinebuf, "%s %s", extend->command, extend->args);
8a419f
+    sprintf(cmdlinebuf, "%s %s", extend->command, args);
8a419f
     return cmdlinebuf;
8a419f
 }
8a419f