]> 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)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 14 Nov 2018 08:17:19 +0000 (10:17 +0200)
src/lib-sql/driver-sqlite.c

index 4cbaa8ae978e576e03d4e19b7c1850f5dc3dbbce..30fb575e9251e06b97ee2cf96f01e6514345b203 100644 (file)
@@ -203,9 +203,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);
@@ -225,9 +230,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;
 }