commit e4fa3f5c591c62aec29efa19fcea0b10ce577996
Author: sin <[email protected]>
Date:   Thu Apr 17 16:22:58 2014 +0100

    Don't leak `buf' if realloc fails
    
    Not an issue in ubase but someone might want to re-use this
    function elsewhere.

diff --git a/sysctl.c b/sysctl.c
index 43ab5b1..b7f2223 100644
--- a/sysctl.c
+++ b/sysctl.c
@@ -12,7 +12,7 @@ getsysctl(char *variable, char **value)
 {
        char path[PATH_MAX];
        char *p;
-       char *buf, c;
+       char *buf, *tmp, c;
        int fd;
        ssize_t n;
        size_t sz, i;
@@ -43,11 +43,13 @@ getsysctl(char *variable, char **value)
                        break;
                if (i == sz - 1) {
                        sz *= 2;
-                       buf = realloc(buf, sz);
-                       if (!buf) {
+                       tmp = realloc(buf, sz);
+                       if (!tmp) {
                                close(fd);
+                               free(buf);
                                return -1;
                        }
+                       buf = tmp;
                }
                buf[i++] = c;
        }


Reply via email to