dovecot: Removed DISABLE_DATA_STACK. Using it was probably broke...

dovecot at dovecot.org dovecot at dovecot.org
Sat Dec 22 03:05:36 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/ae06eb5e2638
changeset: 7027:ae06eb5e2638
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Dec 22 03:05:29 2007 +0200
description:
Removed DISABLE_DATA_STACK. Using it was probably broken anyway and it was
confusing having two implementations in the same file.

diffstat:

2 files changed, 3 insertions(+), 163 deletions(-)
src/lib/data-stack.c |  159 --------------------------------------------------
src/lib/data-stack.h |    7 --

diffs (190 lines):

diff -r 8dc08ad6717c -r ae06eb5e2638 src/lib/data-stack.c
--- a/src/lib/data-stack.c	Sat Dec 22 03:01:35 2007 +0200
+++ b/src/lib/data-stack.c	Sat Dec 22 03:05:29 2007 +0200
@@ -12,12 +12,6 @@
 #elif defined (HAVE_GC_H)
 #  include <gc.h>
 #endif
-
-/* Use malloc() and free() for all memory allocations. Useful for debugging
-   memory corruption. */
-/* #define DISABLE_DATA_STACK */
-
-#ifndef DISABLE_DATA_STACK
 
 /* Initial stack size - this should be kept in a size that doesn't exceed
    in a normal use to avoid extra malloc()ing. */
@@ -494,156 +488,3 @@ void data_stack_deinit(void)
 	current_block = NULL;
 	unused_block = NULL;
 }
-
-#else
-
-#ifdef USE_GC
-#  error No GC with disabled data stack
-#endif
-
-struct stack_frame {
-	struct stack_frame *next;
-	struct frame_alloc *allocs;
-};
-
-struct frame_alloc {
-	struct frame_alloc *next;
-	void *mem;
-};
-
-unsigned int data_stack_frame;
-
-static struct stack_frame *current_frame;
-static void *buffer_mem;
-
-unsigned int t_push(void)
-{
-	struct stack_frame *frame;
-
-	frame = malloc(sizeof(struct stack_frame));
-	if (frame == NULL)
-		i_panic("t_push(): Out of memory");
-	frame->allocs = NULL;
-
-	frame->next = current_frame;
-	current_frame = frame;
-	return data_stack_frame++;
-}
-
-unsigned int t_pop(void)
-{
-	struct stack_frame *frame;
-	struct frame_alloc *alloc;
-
-	frame = current_frame;
-	current_frame = frame->next;
-
-	while (frame->allocs != NULL) {
-		alloc = frame->allocs;
-		frame->allocs = alloc->next;
-
-		free(alloc->mem);
-		free(alloc);
-	}
-
-	free(frame);
-	return --data_stack_frame;
-}
-
-static void add_alloc(void *mem)
-{
-	struct frame_alloc *alloc;
-
-	alloc = malloc(sizeof(struct frame_alloc));
-	if (alloc == NULL)
-		i_panic("add_alloc(): Out of memory");
-	alloc->mem = mem;
-	alloc->next = current_frame->allocs;
-	current_frame->allocs = alloc;
-
-	if (buffer_mem != NULL) {
-		free(buffer_mem);
-		buffer_mem = NULL;
-	}
-}
-
-void *t_malloc(size_t size)
-{
-	void *mem;
-
-	mem = malloc(size);
-	if (mem == NULL)
-		i_panic("t_malloc(): Out of memory");
-	add_alloc(mem);
-	return mem;
-}
-
-void *t_malloc0(size_t size)
-{
-	void *mem;
-
-	mem = calloc(size, 1);
-	if (mem == NULL)
-		i_panic("t_malloc0(): Out of memory");
-	add_alloc(mem);
-	return mem;
-}
-
-bool t_try_realloc(void *mem ATTR_UNUSED, size_t size ATTR_UNUSED)
-{
-	return FALSE;
-}
-
-void *t_buffer_get(size_t size)
-{
-	buffer_mem = realloc(buffer_mem, size);
-	if (buffer_mem == NULL)
-		i_panic("t_buffer_get(): Out of memory");
-	return buffer_mem;
-}
-
-void *t_buffer_reget(void *buffer, size_t size)
-{
-	i_assert(buffer == buffer_mem);
-
-	buffer_mem = realloc(buffer_mem, size);
-	if (buffer_mem == NULL)
-		i_panic("t_buffer_reget(): Out of memory");
-	return buffer_mem;
-}
-
-void t_buffer_alloc(size_t size)
-{
-	void *mem;
-
-	i_assert(buffer_mem != NULL);
-
-	mem = realloc(buffer_mem, size);
-	if (mem == NULL)
-		i_panic("t_buffer_alloc(): Out of memory");
-	buffer_mem = NULL;
-
-	add_alloc(mem);
-}
-
-void data_stack_init(void)
-{
-	data_stack_frame = 0;
-	current_frame = NULL;
-	buffer_mem = NULL;
-
-#ifdef DEBUG
-	clean_after_pop = TRUE;
-#endif
-	t_push();
-}
-
-void data_stack_deinit(void)
-{
-	t_pop();
-
-	if (data_stack_frame != 0)
-		i_panic("Missing t_pop() call");
-}
-
-#endif
diff -r 8dc08ad6717c -r ae06eb5e2638 src/lib/data-stack.h
--- a/src/lib/data-stack.h	Sat Dec 22 03:01:35 2007 +0200
+++ b/src/lib/data-stack.h	Sat Dec 22 03:05:29 2007 +0200
@@ -26,10 +26,9 @@
     - t_malloc()ed data could be accidentally stored into permanent location
       and accessed after it's already been freed. const'ing the return values
       helps for most uses though (see the t_malloc() description).
-    - Debugging invalid memory usage requires recompilation with
-      -DDISABLE_DATA_STACK which then uses malloc() and free() for all
-      allocations and keeping track of them for stack frames making it much
-      slower.
+    - Debugging invalid memory usage may be difficult using existing tools,
+      although compiling with DEBUG enabled helps finding simple buffer
+      overflows.
 */
 
 extern unsigned int data_stack_frame;


More information about the dovecot-cvs mailing list