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

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