diff options
author | John-Mark Bell <jmb@netsurf-browser.org> | 2012-09-19 22:50:28 +0100 |
---|---|---|
committer | John-Mark Bell <jmb@netsurf-browser.org> | 2012-09-19 22:50:28 +0100 |
commit | c22fbf937756a1b35085a8577e138bd1dc540eea (patch) | |
tree | 9611ba097bf0fc252e09691975b7c9efe3489bdf | |
parent | d5e1616a454ffd1a2e9f7b2abf479f0c1aee4425 (diff) | |
download | netsurf-c22fbf937756a1b35085a8577e138bd1dc540eea.tar.gz netsurf-c22fbf937756a1b35085a8577e138bd1dc540eea.tar.bz2 |
Avoid trying to mmap zero-length files.
Remove buf size limit in mmap case: prevented processing entire file.
-rw-r--r-- | content/fetchers/file.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/content/fetchers/file.c b/content/fetchers/file.c index abedaa7b3..73bfbdb3b 100644 --- a/content/fetchers/file.c +++ b/content/fetchers/file.c @@ -256,7 +256,7 @@ static void fetch_file_process_plain(struct fetch_file_context *ctx, { #ifdef HAVE_MMAP fetch_msg msg; - char *buf; + char *buf = NULL; size_t buf_size; int fd; /**< The file descriptor of the object */ @@ -279,17 +279,17 @@ static void fetch_file_process_plain(struct fetch_file_context *ctx, /* set buffer size */ buf_size = fdstat->st_size; - if (buf_size > FETCH_FILE_MAX_BUF_SIZE) - buf_size = FETCH_FILE_MAX_BUF_SIZE; /* allocate the buffer storage */ - buf = mmap(NULL, buf_size, PROT_READ, MAP_SHARED, fd, 0); - if (buf == MAP_FAILED) { - msg.type = FETCH_ERROR; - msg.data.error = "Unable to map memory for file data buffer"; - fetch_file_send_callback(&msg, ctx); - close(fd); - return; + if (buf_size > 0) { + buf = mmap(NULL, buf_size, PROT_READ, MAP_SHARED, fd, 0); + if (buf == MAP_FAILED) { + msg.type = FETCH_ERROR; + msg.data.error = "Unable to map memory for file data buffer"; + fetch_file_send_callback(&msg, ctx); + close(fd); + return; + } } /* fetch is going to be successful */ @@ -327,7 +327,8 @@ static void fetch_file_process_plain(struct fetch_file_context *ctx, fetch_file_process_aborted: - munmap(buf, buf_size); + if (buf != NULL) + munmap(buf, buf_size); close(fd); #else fetch_msg msg; |