]> source.dussan.org Git - rspamd.git/commitdiff
Do not create too small statfiles.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Nov 2013 15:07:24 +0000 (15:07 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Nov 2013 15:07:24 +0000 (15:07 +0000)
src/statfile.c

index 560a06def844118ab35ade2f456935c0061ab99f..c2ca572130b968452cfb804772afe9de56476604 100644 (file)
@@ -229,6 +229,12 @@ statfile_pool_reindex (statfile_pool_t * pool, gchar *filename, size_t old_size,
        struct stat_file_block         *block;
        struct stat_file_header        *header;
 
+       if (size <
+                       sizeof (struct stat_file_header) + sizeof (struct stat_file_section) + sizeof (block)) {
+               msg_err ("file %s is too small to carry any statistic: %z", filename, size);
+               return NULL;
+       }
+
        /* First of all rename old file */
        memory_pool_lock_mutex (pool->lock);
 
@@ -464,6 +470,12 @@ statfile_pool_create (statfile_pool_t * pool, gchar *filename, size_t size)
                return 0;
        }
 
+       if (size <
+                       sizeof (struct stat_file_header) + sizeof (struct stat_file_section) + sizeof (block)) {
+               msg_err ("file %s is too small to carry any statistic: %z", filename, size);
+               return -1;
+       }
+
        memory_pool_lock_mutex (pool->lock);
        nblocks = (size - sizeof (struct stat_file_header) - sizeof (struct stat_file_section)) / sizeof (struct stat_file_block);
        header.total_blocks = nblocks;