diff options
Diffstat (limited to 'src/libstddjb/cdb_init_map.c')
-rw-r--r-- | src/libstddjb/cdb_init_map.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libstddjb/cdb_init_map.c b/src/libstddjb/cdb_init_map.c index bf8eb9d..de9aad0 100644 --- a/src/libstddjb/cdb_init_map.c +++ b/src/libstddjb/cdb_init_map.c @@ -1,8 +1,14 @@ /* ISC license. */ +#ifndef _BSD_SOURCE +#define _BSD_SOURCE +#endif + #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> +#include <stdint.h> +#include <errno.h> #include <skalibs/cdb.h> int cdb_init_map (struct cdb *c, int fd, int domap) @@ -12,6 +18,7 @@ int cdb_init_map (struct cdb *c, int fd, int domap) struct stat st ; char *map ; if (fstat(fd, &st) < 0) return 0 ; + if (st.st_size > UINT32_MAX) return (errno = EOVERFLOW, 0) ; map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0) ; if (map == MAP_FAILED) return 0 ; c->fd = -fd-2 ; |