changeset 4865:a69ab82d7346 HEAD

Check against offset/size overflows.
author Timo Sirainen <tss@iki.fi>
date Sun, 03 Dec 2006 17:09:37 +0200
parents 29d665ef8787
children 4ec6ceb0934a
files src/lib/file-cache.c
diffstat 1 files changed, 4 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/file-cache.c	Sun Dec 03 16:35:07 2006 +0200
+++ b/src/lib/file-cache.c	Sun Dec 03 17:09:37 2006 +0200
@@ -99,6 +99,8 @@
 		   doesn't have to deal with any extra checks. */
 		size = SSIZE_T_MAX;
 	}
+	if (offset >= (uoff_t)-1 - size)
+		size = (uoff_t)-1 - offset;
 
 	if (offset + size > cache->mmap_length &&
 	    offset + size - cache->mmap_length > 1024*1024) {
@@ -221,6 +223,8 @@
 	unsigned char *bits;
 	unsigned int first_page, last_page;
 
+	i_assert(size < (uoff_t)-1 && offset < (uoff_t)-1 - size);
+
 	if (file_cache_set_size(cache, offset + size) < 0) {
 		/* couldn't grow mapping. just make sure the written memory
 		   area is invalidated then. */