dovecot-2.2-pigeonhole: lib-sieve: Fixed memory leak in code dum...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sun Nov 29 20:33:39 UTC 2015
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/168b6eb4671e
changeset: 2154:168b6eb4671e
user: Stephan Bosch <stephan at rename-it.nl>
date: Sun Nov 29 21:33:33 2015 +0100
description:
lib-sieve: Fixed memory leak in code dumper.
The free handler of code dumper extensions was never executed.
diffstat:
src/lib-sieve/plugins/variables/ext-variables-dump.c | 6 ++++--
src/lib-sieve/sieve-code-dumper.c | 19 +++++++++++++++----
src/lib-sieve/sieve-code-dumper.h | 2 +-
3 files changed, 20 insertions(+), 7 deletions(-)
diffs (66 lines):
diff -r e4f181199457 -r 168b6eb4671e src/lib-sieve/plugins/variables/ext-variables-dump.c
--- a/src/lib-sieve/plugins/variables/ext-variables-dump.c Sun Nov 29 20:01:09 2015 +0100
+++ b/src/lib-sieve/plugins/variables/ext-variables-dump.c Sun Nov 29 21:33:33 2015 +0100
@@ -19,7 +19,8 @@
static void ext_variables_code_dumper_free
(struct sieve_code_dumper *dumper, void *context);
-const struct sieve_code_dumper_extension variables_dump_extension = {
+static const struct sieve_code_dumper_extension
+variables_dump_extension = {
&variables_extension,
ext_variables_code_dumper_free
};
@@ -62,7 +63,8 @@
p_array_init(&dctx->ext_scopes, pool,
sieve_extensions_get_count(this_ext->svinst));
- sieve_dump_extension_set_context(dumper, this_ext, dctx);
+ sieve_dump_extension_register
+ (dumper, this_ext, &variables_dump_extension, dctx);
}
return dctx;
diff -r e4f181199457 -r 168b6eb4671e src/lib-sieve/sieve-code-dumper.c
--- a/src/lib-sieve/sieve-code-dumper.c Sun Nov 29 20:01:09 2015 +0100
+++ b/src/lib-sieve/sieve-code-dumper.c Sun Nov 29 21:33:33 2015 +0100
@@ -67,12 +67,23 @@
return cdumper;
}
-void sieve_code_dumper_free(struct sieve_code_dumper **cdumper)
+void sieve_code_dumper_free(struct sieve_code_dumper **_cdumper)
{
- sieve_binary_debug_reader_deinit(&(*cdumper)->dreader);
+ struct sieve_code_dumper *cdumper = *_cdumper;
+ const struct sieve_code_dumper_extension_reg *eregs;
+ unsigned int count, i;
- pool_unref(&((*cdumper)->pool));
- *cdumper = NULL;
+ sieve_binary_debug_reader_deinit(&cdumper->dreader);
+
+ /* Signal registered extensions that the dumper is being destroyed */
+ eregs = array_get(&cdumper->extensions, &count);
+ for ( i = 0; i < count; i++ ) {
+ if ( eregs[i].cdmpext != NULL && eregs[i].cdmpext->free != NULL )
+ eregs[i].cdmpext->free(cdumper, eregs[i].context);
+ }
+
+ pool_unref(&cdumper->pool);
+ *_cdumper = NULL;
}
pool_t sieve_code_dumper_pool(struct sieve_code_dumper *cdumper)
diff -r e4f181199457 -r 168b6eb4671e src/lib-sieve/sieve-code-dumper.h
--- a/src/lib-sieve/sieve-code-dumper.h Sun Nov 29 20:01:09 2015 +0100
+++ b/src/lib-sieve/sieve-code-dumper.h Sun Nov 29 21:33:33 2015 +0100
@@ -11,7 +11,7 @@
struct sieve_code_dumper *sieve_code_dumper_create
(struct sieve_dumptime_env *denv);
void sieve_code_dumper_free
- (struct sieve_code_dumper **dumper);
+ (struct sieve_code_dumper **_dumper);
pool_t sieve_code_dumper_pool
(struct sieve_code_dumper *dumper);
More information about the dovecot-cvs
mailing list