Author: delphij
Date: Mon Nov 28 07:19:45 2016
New Revision: 309238
URL: https://svnweb.freebsd.org/changeset/base/309238

Log:
  Plug a potential memory leak.
  
  MFC after:    2 weeks

Modified:
  head/bin/kenv/kenv.c

Modified: head/bin/kenv/kenv.c
==============================================================================
--- head/bin/kenv/kenv.c        Mon Nov 28 07:04:32 2016        (r309237)
+++ head/bin/kenv/kenv.c        Mon Nov 28 07:19:45 2016        (r309238)
@@ -63,7 +63,6 @@ main(int argc, char **argv)
        char *env, *eq, *val;
        int ch, error;
 
-       error = 0;
        val = NULL;
        env = NULL;
        while ((ch = getopt(argc, argv, "hNquv")) != -1) {
@@ -128,7 +127,7 @@ main(int argc, char **argv)
 static int
 kdumpenv(void)
 {
-       char *buf, *cp;
+       char *buf, *bp, *cp;
        int buflen, envlen;
 
        envlen = kenv(KENV_DUMP, NULL, NULL, 0);
@@ -136,10 +135,9 @@ kdumpenv(void)
                return (-1);
        for (;;) {
                buflen = envlen * 120 / 100;
-               buf = malloc(buflen + 1);
+               buf = calloc(1, buflen + 1);
                if (buf == NULL)
                        return (-1);
-               memset(buf, 0, buflen + 1);     /* Be defensive */
                envlen = kenv(KENV_DUMP, NULL, buf, buflen);
                if (envlen < 0) {
                        free(buf);
@@ -151,21 +149,23 @@ kdumpenv(void)
                        break;
        }
 
-       for (; *buf != '\0'; buf += strlen(buf) + 1) {
+       for (bp = buf; *bp != '\0'; bp += strlen(bp) + 1) {
                if (hflag) {
-                       if (strncmp(buf, "hint.", 5) != 0)
+                       if (strncmp(bp, "hint.", 5) != 0)
                                continue;
                }
-               cp = strchr(buf, '=');
+               cp = strchr(bp, '=');
                if (cp == NULL)
                        continue;
                *cp++ = '\0';
                if (Nflag)
-                       printf("%s\n", buf);
+                       printf("%s\n", bp);
                else
-                       printf("%s=\"%s\"\n", buf, cp);
-               buf = cp;
+                       printf("%s=\"%s\"\n", bp, cp);
+               bp = cp;
        }
+
+       free(buf);
        return (0);
 }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to