roken: Fix FD and memory leaks in rk_undumptext()
This commit is contained in:
@@ -95,8 +95,10 @@ undump_not_file(int fd, char **out, size_t *size, int nul_terminate)
|
|||||||
if (bytes < 0 &&
|
if (bytes < 0 &&
|
||||||
(errno == EAGAIN || errno == EWOULDBLOCK))
|
(errno == EAGAIN || errno == EWOULDBLOCK))
|
||||||
continue;
|
continue;
|
||||||
if (bytes < 0)
|
if (bytes < 0) {
|
||||||
|
free(buf);
|
||||||
return errno;
|
return errno;
|
||||||
|
}
|
||||||
sz += bytes;
|
sz += bytes;
|
||||||
} while (sz < lim);
|
} while (sz < lim);
|
||||||
|
|
||||||
@@ -205,8 +207,12 @@ rk_undumptext(const char *filename, char **out, size_t *size)
|
|||||||
*out = NULL;
|
*out = NULL;
|
||||||
|
|
||||||
fd = open(filename, O_RDONLY, 0);
|
fd = open(filename, O_RDONLY, 0);
|
||||||
if (fd < 0 || fstat(fd, &sb) != 0)
|
if (fd < 0)
|
||||||
|
return errno;
|
||||||
|
if (fstat(fd, &sb) != 0) {
|
||||||
|
(void) close(fd);
|
||||||
return errno;
|
return errno;
|
||||||
|
}
|
||||||
if (!S_ISREG(sb.st_mode)) {
|
if (!S_ISREG(sb.st_mode)) {
|
||||||
ret = undump_not_file(fd, out, size, 1);
|
ret = undump_not_file(fd, out, size, 1);
|
||||||
(void) close(fd);
|
(void) close(fd);
|
||||||
|
Reference in New Issue
Block a user