summaryrefslogtreecommitdiff
path: root/src/input/input_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/input_file.c')
-rw-r--r--src/input/input_file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/input/input_file.c b/src/input/input_file.c
index 0ec25e1f8..1dce8baad 100644
--- a/src/input/input_file.c
+++ b/src/input/input_file.c
@@ -359,6 +359,9 @@ static int file_plugin_open (input_plugin_t *this_gen ) {
file_input_plugin_t *this = (file_input_plugin_t *) this_gen;
char *filename;
struct stat sbuf;
+#ifdef HAVE_MMAP
+ size_t tmp_size;
+#endif
lprintf("file_plugin_open\n");
@@ -423,10 +426,14 @@ static int file_plugin_open (input_plugin_t *this_gen ) {
}
#ifdef HAVE_MMAP
- if ( (this->mmap_base = mmap(NULL, sbuf.st_size, PROT_READ, MAP_SHARED, this->fh, 0)) != (void*)-1 ) {
+ tmp_size = sbuf.st_size; /* may cause truncation - if it does, DON'T mmap! */
+ if ((tmp_size == sbuf.st_size) &&
+ ( (this->mmap_base = mmap(NULL, tmp_size, PROT_READ, MAP_SHARED, this->fh, 0)) != (void*)-1 )) {
this->mmap_on = 1;
this->mmap_curr = this->mmap_base;
this->mmap_len = sbuf.st_size;
+ } else {
+ this->mmap_base = NULL;
}
#endif