]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
driver-sqlite: Fix crash and event leak in driver_sqlite_query_s()
authorMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Tue, 11 Sep 2018 08:21:36 +0000 (11:21 +0300)
committerMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Wed, 12 Sep 2018 15:23:40 +0000 (18:23 +0300)
src/lib-sql/driver-sqlite.c

index 32f4707ec77df66fef7e62789206dec992bbbbc5..3ba030c3ccde7e0c86ca3c30ecd9068d5fc2b6f1 100644 (file)
@@ -201,9 +201,14 @@ driver_sqlite_query_s(struct sql_db *_db, const char *query)
 {
        struct sqlite_db *db = (struct sqlite_db *)_db;
        struct sqlite_result *result;
+       struct event *event;
 
        result = i_new(struct sqlite_result, 1);
-       result->api.event = event_create(_db->event);
+       result->api.db = _db;
+       /* Temporarily store the event since result->api gets
+        * overwritten later here and we need to reset it. */
+       event = event_create(_db->event);
+       result->api.event = event;
 
        if (driver_sqlite_connect(_db) < 0) {
                driver_sqlite_result_log(&result->api, query);
@@ -223,9 +228,10 @@ driver_sqlite_query_s(struct sql_db *_db, const char *query)
                        result->cols = 0;
                }
        }
+
        result->api.db = _db;
        result->api.refcount = 1;
-
+       result->api.event = event;
        return &result->api;
 }