]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: data-stack - Support re-initialization
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 4 Dec 2025 22:17:26 +0000 (23:17 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 2 Feb 2026 18:54:43 +0000 (18:54 +0000)
Make sure global state is reset properly through deinit->init cycle.
This is needed for fuzzing with address sanitizer.

src/lib/data-stack.c

index 477ad91d4a3c26123593762496655ec716fa87c4..9205c6fba68ec60e0e3e5824f899832183d4873c 100644 (file)
@@ -756,7 +756,9 @@ void data_stack_init(void)
        outofmem_area.block.size = outofmem_area.block.left =
                sizeof(outofmem_area) - sizeof(outofmem_area.block);
        outofmem_area.block.canary = BLOCK_CANARY;
+       outofmem = FALSE;
 
+       unused_block = NULL;
        current_block = mem_block_alloc(INITIAL_STACK_SIZE);
        current_frame = NULL;
 
@@ -764,6 +766,9 @@ void data_stack_init(void)
        last_buffer_size = 0;
 
        root_frame_id = t_push("data_stack_init");
+
+       event_datastack = NULL;
+       event_datastack_deinitialized = FALSE;
 }
 
 void data_stack_deinit_event(void)
@@ -781,4 +786,5 @@ void data_stack_deinit(void)
        free(current_block);
        current_block = NULL;
        data_stack_free_unused();
+       data_stack_initialized = FALSE;
 }