From: Timo Sirainen Date: Wed, 9 Feb 2022 21:12:19 +0000 (+0200) Subject: dict-sql: Fix assert-crash if trying to rollback an open set/inc transaction X-Git-Tag: 2.3.19~68 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d31af56e9a7279d20412d48c33bbd47f44091587;p=thirdparty%2Fdovecot%2Fcore.git dict-sql: Fix assert-crash if trying to rollback an open set/inc transaction Fixes: Panic: file dict-sql.c: line 911 (sql_dict_transaction_free): assertion failed: (!array_is_created(&ctx->prev_set)) --- diff --git a/src/lib-dict-backend/dict-sql.c b/src/lib-dict-backend/dict-sql.c index 7935b9351b..c44330b02d 100644 --- a/src/lib-dict-backend/dict-sql.c +++ b/src/lib-dict-backend/dict-sql.c @@ -88,6 +88,8 @@ static struct sql_db_cache *dict_sql_db_cache; static void sql_dict_prev_inc_flush(struct sql_dict_transaction_context *ctx); static void sql_dict_prev_set_flush(struct sql_dict_transaction_context *ctx); +static void sql_dict_prev_inc_free(struct sql_dict_transaction_context *ctx); +static void sql_dict_prev_set_free(struct sql_dict_transaction_context *ctx); static int sql_dict_init(struct dict *driver, const char *uri, @@ -916,8 +918,10 @@ sql_dict_transaction_init(struct dict *_dict) static void sql_dict_transaction_free(struct sql_dict_transaction_context *ctx) { - i_assert(!array_is_created(&ctx->prev_inc)); - i_assert(!array_is_created(&ctx->prev_set)); + if (array_is_created(&ctx->prev_inc)) + sql_dict_prev_inc_free(ctx); + if (array_is_created(&ctx->prev_set)) + sql_dict_prev_set_free(ctx); pool_unref(&ctx->inc_row_pool); i_free(ctx->error);