Skip to content
Snippets Groups Projects
Unverified Commit 3e292ba0 authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

gluon-web: close FDs after mmap()

parent 99b4d2ea
No related branches found
No related tags found
No related merge requests found
......@@ -128,20 +128,26 @@ static lmo_archive_t * lmo_open(const char *file)
lmo_archive_t *ar = NULL;
struct stat s;
if ((fd = open(file, O_RDONLY|O_CLOEXEC)) == -1)
fd = open(file, O_RDONLY|O_CLOEXEC);
if (fd < 0)
goto err;
if (fstat(fd, &s) == -1)
if (fstat(fd, &s))
goto err;
if ((ar = calloc(1, sizeof(*ar))) != NULL) {
if ((ar->data = mmap(NULL, s.st_size, PROT_READ, MAP_SHARED, fd, 0)) == MAP_FAILED)
ar->data = mmap(NULL, s.st_size, PROT_READ, MAP_SHARED, fd, 0);
close(fd);
fd = -1;
if (ar->data == MAP_FAILED)
goto err;
ar->end = ar->data + s.st_size;
uint32_t idx_offset = get_be32(ar->end - sizeof(uint32_t));
ar->index = (const lmo_entry_t *)(ar->data + idx_offset);
ar->index = (const lmo_entry_t *)(ar->data + idx_offset);
if ((const char *)ar->index > (ar->end - sizeof(uint32_t)))
goto err;
......
......@@ -56,7 +56,6 @@ struct template_chunk {
/* parser state */
struct template_parser {
int fd;
size_t size;
char *data;
char *off;
......@@ -96,24 +95,28 @@ static struct template_parser * template_init(struct template_parser *parser)
struct template_parser * template_open(const char *file)
{
int fd = -1;
struct stat s;
struct template_parser *parser;
if (!(parser = calloc(1, sizeof(*parser))))
goto err;
parser->fd = -1;
parser->file = file;
if ((parser->fd = open(file, O_RDONLY|O_CLOEXEC)) < 0)
fd = open(file, O_RDONLY|O_CLOEXEC);
if (fd < 0)
goto err;
if (fstat(parser->fd, &s))
if (fstat(fd, &s))
goto err;
parser->size = s.st_size;
parser->data = mmap(NULL, parser->size, PROT_READ, MAP_PRIVATE,
parser->fd, 0);
fd, 0);
close(fd);
fd = -1;
if (parser->data == MAP_FAILED)
goto err;
......@@ -121,6 +124,8 @@ struct template_parser * template_open(const char *file)
return template_init(parser);
err:
if (fd >= 0)
close(fd);
template_close(parser);
return NULL;
}
......@@ -132,8 +137,6 @@ struct template_parser * template_string(const char *str, size_t len)
if (!(parser = calloc(1, sizeof(*parser))))
goto err;
parser->fd = -1;
parser->size = len;
parser->data = (char *)str;
......@@ -155,9 +158,6 @@ void template_close(struct template_parser *parser)
if (parser->file) {
if ((parser->data != NULL) && (parser->data != MAP_FAILED))
munmap(parser->data, parser->size);
if (parser->fd >= 0)
close(parser->fd);
}
free(parser);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment