seekdir_basic: fix various Coverity issues
Address.. - .. resource leaks of file descriptors and memory - .. unchecked return values from creat(2), mkdir(2), and telldir(3) - .. potential NULL derefs after calling readdir(3) MFC after: 1 week Reported by: Coverity CID: 975255, 975256, 976989, 978989, 978990
This commit is contained in:
parent
391df78ad4
commit
05aee7d5b0
@ -39,6 +39,10 @@
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
ATF_TC(seekdir_basic);
|
||||
ATF_TC_HEAD(seekdir_basic, tc)
|
||||
{
|
||||
@ -54,10 +58,26 @@ ATF_TC_BODY(seekdir_basic, tc)
|
||||
struct dirent *entry;
|
||||
long here;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#define CREAT(x, m) do { \
|
||||
int _creat_fd; \
|
||||
ATF_REQUIRE_MSG((_creat_fd = creat((x), (m))), \
|
||||
"creat(%s, %x) failed: %s", (x), (m), \
|
||||
strerror(errno)); \
|
||||
(void)close(_creat_fd); \
|
||||
} while(0);
|
||||
|
||||
ATF_REQUIRE_MSG(mkdir("t", 0755) == 0,
|
||||
"mkdir failed: %s", strerror(errno));
|
||||
CREAT("t/a", 0600);
|
||||
CREAT("t/b", 0600);
|
||||
CREAT("t/c", 0600);
|
||||
#else
|
||||
mkdir("t", 0755);
|
||||
creat("t/a", 0600);
|
||||
creat("t/b", 0600);
|
||||
creat("t/c", 0600);
|
||||
#endif
|
||||
|
||||
dp = opendir("t");
|
||||
if ( dp == NULL)
|
||||
@ -70,9 +90,17 @@ ATF_TC_BODY(seekdir_basic, tc)
|
||||
/* get first entry */
|
||||
entry = readdir(dp);
|
||||
here = telldir(dp);
|
||||
#ifdef __FreeBSD__
|
||||
ATF_REQUIRE_MSG(here != -1,
|
||||
"telldir failed: %s", strerror(errno));
|
||||
#endif
|
||||
|
||||
/* get second entry */
|
||||
entry = readdir(dp);
|
||||
#ifdef __FreeBSD__
|
||||
ATF_REQUIRE_MSG(entry != NULL,
|
||||
"readdir failed: %s", strerror(errno));
|
||||
#endif
|
||||
wasname = strdup(entry->d_name);
|
||||
if (wasname == NULL)
|
||||
atf_tc_fail("cannot allocate memory");
|
||||
@ -109,6 +137,9 @@ ATF_TC_BODY(seekdir_basic, tc)
|
||||
atf_tc_fail("3rd seekdir found wrong name");
|
||||
|
||||
closedir(dp);
|
||||
#ifdef __FreeBSD__
|
||||
free(wasname);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* There is no sbrk on AArch64 and RISC-V */
|
||||
|
Loading…
Reference in New Issue
Block a user