diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index ddfe870d4edff37a4b2085eb2d57429e0f9701d9..8e1945972aaf0dcf0089f5df77311e51d8818a17 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -405,7 +405,6 @@ imap_sieve_run_init_scripts(struct imap_sieve *isieve, enum sieve_error error; unsigned int count = 0; const char *const *sp; - int ret; /* Admin scripts before user script */ if (scripts_before != NULL) { @@ -495,8 +494,16 @@ int imap_sieve_run_init(struct imap_sieve *isieve, storage, script_name, scripts_before, scripts_after, &user_script, &count); - if (ret < 0) + if (ret < 0) { + unsigned int i; + + for (i = 0; i < max_len; i++) { + if (scripts[i].script != NULL) + sieve_script_unref(&scripts[i].script); + } + pool_unref(&pool); return -1; + } if (count == 0) { /* None of the scripts could be opened */ pool_unref(&pool);