dovecot-2.2-pigeonhole: lib-sieve: Fixed memory leak occurring i...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sun Nov 29 14:33:30 UTC 2015
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/d9d6a8e4d0b9
changeset: 2148:d9d6a8e4d0b9
user: Stephan Bosch <stephan at rename-it.nl>
date: Sun Nov 29 15:33:25 2015 +0100
description:
lib-sieve: Fixed memory leak occurring in interpreter loop handling.
diffstat:
src/lib-sieve/sieve-interpreter.c | 23 ++++++++++++++---------
1 files changed, 14 insertions(+), 9 deletions(-)
diffs (36 lines):
diff -r cfa3025bb14f -r d9d6a8e4d0b9 src/lib-sieve/sieve-interpreter.c
--- a/src/lib-sieve/sieve-interpreter.c Sun Nov 29 15:28:18 2015 +0100
+++ b/src/lib-sieve/sieve-interpreter.c Sun Nov 29 15:33:25 2015 +0100
@@ -629,18 +629,23 @@
/* Find the loop */
i_assert( array_is_created(&interp->loop_stack) );
loops = array_get_modifiable(&interp->loop_stack, &count);
- for ( i = count; i > 0 && &loops[i-1] != loop; i-- )
+ i_assert( count > 0 );
+
+ i = count;
+ do {
pool_unref(&loops[i-1].pool);
- i_assert( i > 0 && &loops[i-1] == loop );
+ i--;
+ } while ( i > 0 && &loops[i] != loop );
+ i_assert( &loops[i] == loop );
+
+ /* Set new loop limit */
+ if ( i > 0 )
+ interp->loop_limit = loops[i].end;
+ else
+ interp->loop_limit = 0;
/* Delete it and all deeper loops */
- array_delete(&interp->loop_stack, i-1, count - (i-1));
-
- /* Set new loop limit */
- if ( --i > 0 )
- interp->loop_limit = loops[i-1].end;
- else
- interp->loop_limit =- 0;
+ array_delete(&interp->loop_stack, i, count - i);
/* Trace */
if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_COMMANDS) ) {
More information about the dovecot-cvs
mailing list