From 3d4ce545f2563f5dde88e7bd50ef4944a65112db Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Wed, 21 Feb 2024 13:09:52 +0100 Subject: [PATCH] liblastlog2: Improved sqlite3 error handling --- liblastlog2/src/lastlog2.c | 42 ++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/liblastlog2/src/lastlog2.c b/liblastlog2/src/lastlog2.c index 744d41f1a..cafcb017e 100644 --- a/liblastlog2/src/lastlog2.c +++ b/liblastlog2/src/lastlog2.c @@ -185,10 +185,17 @@ read_entry(sqlite3 *db, const char *user, goto out_read_entry; } } - } else { + } else if (step == SQLITE_DONE) { + retval = -ENOENT; + } else if (step == SQLITE_BUSY) { retval = -1; if (error) - if (asprintf(error, "User '%s' not found (%d)", user, step) < 0) + if ((*error = strdup ("Database busy")) == NULL) + retval = -ENOMEM; + } else if (step == SQLITE_ERROR) { + retval = -1; + if (error) + if (asprintf (error, "Error stepping through database: %s", sqlite3_errmsg (db)) < 0) retval = -ENOMEM; } @@ -298,11 +305,17 @@ write_entry(sqlite3 *db, const char *user, if (step != SQLITE_DONE) { retval = -1; - if (error) - if (asprintf(error, "Delete statement did not return SQLITE_DONE: %d", - step) < 0) - retval = -ENOMEM; - goto out_ll2_read_entry; + if (error) { + if (step == SQLITE_ERROR) { + if (asprintf (error, "Delete statement failed: %s", + sqlite3_errmsg (db)) < 0) + retval = -ENOMEM; + } else { + if (asprintf (error, "Delete statement did not return SQLITE_DONE: %d", + step) < 0) + retval = -ENOMEM; + } + } } out_ll2_read_entry: if (res) @@ -448,10 +461,17 @@ remove_entry(sqlite3 *db, const char *user, char **error) if (step != SQLITE_DONE) { retval = -1; - if (error) - if (asprintf(error, "Delete statement did not return SQLITE_DONE: %d", - step) < 0) - retval = -ENOMEM; + if (error) { + if (step == SQLITE_ERROR) { + if (asprintf (error, "Delete statement failed: %s", + sqlite3_errmsg (db)) < 0) + retval = -ENOMEM; + } else { + if (asprintf (error, "Delete statement did not return SQLITE_DONE: %d", + step) < 0) + retval = -ENOMEM; + } + } } out_remove_entry: if (res) -- 2.47.3