Skip to content

Commit

Permalink
LDA Sieve plugin: Fixed memory leak caused by not cleaning up the sie…
Browse files Browse the repository at this point in the history
…ve_discard script.

Moved script cleanup to separate function as well.
  • Loading branch information
stephanbosch committed Jun 28, 2017
1 parent c024dc7 commit dd34509
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions src/plugins/lda-sieve/lda-sieve-plugin.c
Expand Up @@ -748,6 +748,17 @@ static int lda_sieve_find_scripts(struct lda_sieve_run_context *srctx)
return ret;
}

static void
lda_sieve_free_scripts(struct lda_sieve_run_context *srctx)
{
unsigned int i;

for ( i = 0; i < srctx->script_count; i++ )
sieve_script_unref(&srctx->scripts[i]);
if ( srctx->discard_script != NULL )
sieve_script_unref(&srctx->discard_script);
}

static int lda_sieve_execute
(struct lda_sieve_run_context *srctx, struct mail_storage **storage_r)
{
Expand Down Expand Up @@ -858,7 +869,6 @@ static int lda_sieve_deliver_mail
struct lda_sieve_run_context srctx;
bool debug = mdctx->dest_user->mail_debug;
struct sieve_environment svenv;
unsigned int i;
int ret = 0;

/* Initialize run context */
Expand Down Expand Up @@ -899,12 +909,10 @@ static int lda_sieve_deliver_mail
ret = -1;
else if ( srctx.scripts == NULL )
ret = 0;
else {
else
ret = lda_sieve_execute(&srctx, storage_r);

for ( i = 0; i < srctx.script_count; i++ )
sieve_script_unref(&srctx.scripts[i]);
}

lda_sieve_free_scripts(&srctx);
} T_END;

/* Clean up */
Expand Down

0 comments on commit dd34509

Please sign in to comment.