changeset 19797:f86de8cf34d9

lib: mempool-alloconly unit test improvement: verify that data stack isn't used by p_malloc()
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 21 Feb 2016 19:01:31 +0200
parents 910fcbab16c7
children 5bf3271eb63b
files src/lib/test-mempool-alloconly.c
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/test-mempool-alloconly.c	Sun Feb 21 18:58:50 2016 +0200
+++ b/src/lib/test-mempool-alloconly.c	Sun Feb 21 19:01:31 2016 +0200
@@ -16,15 +16,24 @@
 
 void test_mempool_alloconly(void)
 {
+#define SENTRY_SIZE 32
+#define SENTRY_CHAR '\xDE'
 #define PMALLOC_MAX_COUNT 128
 	pool_t pool;
 	unsigned int i, j, k;
 	void *mem[PMALLOC_MAX_COUNT + 1];
+	char *sentry;
 
 	test_begin("mempool_alloconly");
 	for (i = 0; i < 64; i++) {
 		for (j = 1; j <= 128; j++) {
 			pool = pool_alloconly_create(MEMPOOL_GROWING"test", i);
+			/* make sure p_malloc() doesn't overwrite unallocated
+			   data in data stack. parts of the code relies on
+			   this. */
+			sentry = t_buffer_get(SENTRY_SIZE);
+			memset(sentry, SENTRY_CHAR, SENTRY_SIZE);
+
 			mem[0] = p_malloc(pool, j);
 			memset(mem[0], j, j);
 
@@ -32,6 +41,8 @@
 				mem[k] = p_malloc(pool, k);
 				memset(mem[k], k, k);
 			}
+			test_assert(mem_has_bytes(sentry, SENTRY_SIZE, SENTRY_CHAR));
+			test_assert(t_buffer_get(SENTRY_SIZE) == sentry);
 
 			test_assert(mem_has_bytes(mem[0], j, j));
 			for (k = 1; k <= PMALLOC_MAX_COUNT; k++)