]> git.ipfire.org Git - thirdparty/ulogd2.git/commitdiff
output: SQLITE3: catch errors creating SQL statement
authorJeremy Sowden <jeremy@azazel.net>
Tue, 30 Nov 2021 10:55:51 +0000 (10:55 +0000)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 3 Jan 2022 15:29:56 +0000 (16:29 +0100)
`sqlite3_createstmt` returns non-zero on error, but the return-value was
being ignored.  Change the calling code to check the return-value, log
an error message and propagate the error.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
output/sqlite3/ulogd_output_SQLITE3.c

index d4bd1baf1f36e55deedf3ed93c2a38e28c3f2f8e..51eab782cc9dca2d370284563b2a902a2ff92eae 100644 (file)
@@ -104,11 +104,14 @@ add_row(struct ulogd_pluginstance *pi)
                ret = sqlite3_finalize(priv->p_stmt);
                priv->p_stmt = NULL;
 
-               if (ret == SQLITE_SCHEMA)
-                       sqlite3_createstmt(pi);
-               else {
+               if (ret != SQLITE_SCHEMA) {
                        ulogd_log(ULOGD_ERROR, "SQLITE3: step: %s\n",
-                                         sqlite3_errmsg(priv->dbh));
+                                 sqlite3_errmsg(priv->dbh));
+                       goto err_reset;
+               }
+               if (sqlite3_createstmt(pi) < 0) {
+                       ulogd_log(ULOGD_ERROR,
+                                 "SQLITE3: Could not create statement.\n");
                        goto err_reset;
                }
        }
@@ -248,8 +251,8 @@ sqlite3_createstmt(struct ulogd_pluginstance *pi)
        sqlite3_prepare(priv->dbh, priv->stmt, -1, &priv->p_stmt, 0);
        if (priv->p_stmt == NULL) {
                ulogd_log(ULOGD_ERROR, "SQLITE3: prepare: %s\n",
-                                 sqlite3_errmsg(priv->dbh));
-               return 1;
+                         sqlite3_errmsg(priv->dbh));
+               return -1;
        }
 
        DEBUGP("statement prepared.\n");
@@ -386,7 +389,10 @@ sqlite3_start(struct ulogd_pluginstance *pi)
        }
 
        /* create and prepare the actual insert statement */
-       sqlite3_createstmt(pi);
+       if (sqlite3_createstmt(pi) < 0) {
+               ulogd_log(ULOGD_ERROR, "SQLITE3: Could not create statement.\n");
+               return -1;
+       }
 
        return 0;
 }