]> granicus.if.org Git - cgit/commitdiff
Close fd on error in readfile()
authorRys Sommefeldt <rys@pixeltards.com>
Sat, 7 Nov 2009 14:24:45 +0000 (15:24 +0100)
committerLars Hjemli <hjemli@gmail.com>
Sat, 7 Nov 2009 14:34:18 +0000 (15:34 +0100)
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
shared.c

index d7b2d5a9efe777acc8140ae9401b9c9d17a5fd79..a27ab30716f276e4f6644e11734b19bc7cff1d5c 100644 (file)
--- a/shared.c
+++ b/shared.c
@@ -406,12 +406,17 @@ int readfile(const char *path, char **buf, size_t *size)
        fd = open(path, O_RDONLY);
        if (fd == -1)
                return errno;
-       if (fstat(fd, &st))
+       if (fstat(fd, &st)) {
+               close(fd);
                return errno;
-       if (!S_ISREG(st.st_mode))
+       }
+       if (!S_ISREG(st.st_mode)) {
+               close(fd);
                return EISDIR;
+       }
        *buf = xmalloc(st.st_size + 1);
        *size = read_in_full(fd, *buf, st.st_size);
        (*buf)[*size] = '\0';
+       close(fd);
        return (*size == st.st_size ? 0 : errno);
 }