Merge pull request #238 from mager-m/master

Fixed memory allocation for `struct dirent`
This commit is contained in:
Olof Hagsand 2021-06-11 11:10:34 +02:00 committed by GitHub
commit 92e340f462
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -50,6 +50,7 @@
#include <sys/param.h> #include <sys/param.h>
#include <unistd.h> #include <unistd.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <stddef.h>
/* cligen */ /* cligen */
#include <cligen/cligen.h> #include <cligen/cligen.h>
@ -103,6 +104,7 @@ clicon_file_dirent(const char *dir,
DIR *dirp; DIR *dirp;
int res; int res;
int nent; int nent;
int direntStructSize;
regex_t re; regex_t re;
char errbuf[128]; char errbuf[128];
char filename[MAXPATHLEN]; char filename[MAXPATHLEN];
@ -143,12 +145,13 @@ clicon_file_dirent(const char *dir,
if ((type & st.st_mode) == 0) if ((type & st.st_mode) == 0)
continue; continue;
} }
if ((tmp = realloc(new, (nent+1)*sizeof(*dvecp))) == NULL) { direntStructSize = offsetof(struct dirent, d_name) + strlen(dent->d_name) + 1;
if ((tmp = realloc(new, (nent+1)*direntStructSize)) == NULL) {
clicon_err(OE_UNIX, errno, "realloc"); clicon_err(OE_UNIX, errno, "realloc");
goto quit; goto quit;
} }
new = tmp; new = tmp;
memcpy(&new[nent], dent, sizeof(*dent)); memcpy(&new[nent], dent, direntStructSize);
nent++; nent++;
} /* while */ } /* while */