From: Michael Tremer Date: Fri, 19 Aug 2022 16:39:09 +0000 (+0000) Subject: db: Properly abort when we cannot import a file X-Git-Tag: 0.9.28~414 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f04369e6189c249fb7e144646e507ea6e3ee5985;p=pakfire.git db: Properly abort when we cannot import a file Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/db.c b/src/libpakfire/db.c index 095a3a47c..f3b096b64 100644 --- a/src/libpakfire/db.c +++ b/src/libpakfire/db.c @@ -2058,8 +2058,20 @@ static int pakfire_db_load_file(struct pakfire_db* db, struct pakfire_filelist* // Path const char* path = (const char*)sqlite3_column_text(stmt, 0); - if (path) - pakfire_file_set_path(file, path); + + // Abort if no path is set + if (!path) { + ERROR(db->pakfire, "File has no path\n"); + r = 1; + goto ERROR; + } + + // Set path + r = pakfire_file_set_path(file, path); + if (r) { + ERROR(db->pakfire, "%s: Could not set path '%s': %m\n", path, path); + goto ERROR; + } // Size size_t size = sqlite3_column_int64(stmt, 1); @@ -2073,13 +2085,37 @@ static int pakfire_db_load_file(struct pakfire_db* db, struct pakfire_filelist* // User const char* user = (const char*)sqlite3_column_text(stmt, 3); - if (user) - pakfire_file_set_user(file, user); + + // Abort if no user is set + if (!user) { + ERROR(db->pakfire, "%s: No user\n", path); + r = 1; + goto ERROR; + } + + // Set user + r = pakfire_file_set_user(file, user); + if (r) { + ERROR(db->pakfire, "%s: Could not set user '%s': %m\n", path, user); + goto ERROR; + } // Group const char* group = (const char*)sqlite3_column_text(stmt, 4); - if (group) - pakfire_file_set_group(file, group); + + // Abort if no group is set + if (!group) { + ERROR(db->pakfire, "%s: No group\n", path); + r = 1; + goto ERROR; + } + + // Set group + r = pakfire_file_set_group(file, group); + if (r) { + ERROR(db->pakfire, "%s: Could not set group '%s': %m\n", path, group); + goto ERROR; + } // ctime time_t ctime = sqlite3_column_int64(stmt, 5); @@ -2103,6 +2139,8 @@ static int pakfire_db_load_file(struct pakfire_db* db, struct pakfire_filelist* // Append the file to the filelist r = pakfire_filelist_append(filelist, file); + if (r) + goto ERROR; ERROR: if (file) diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index 03bf36c5b..03f17e7ea 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -351,16 +351,16 @@ PAKFIRE_EXPORT const char* pakfire_file_get_user(struct pakfire_file* file) { return file->user; } -PAKFIRE_EXPORT void pakfire_file_set_user(struct pakfire_file* file, const char* user) { - pakfire_string_set(file->user, user); +PAKFIRE_EXPORT int pakfire_file_set_user(struct pakfire_file* file, const char* user) { + return pakfire_string_set(file->user, user); } PAKFIRE_EXPORT const char* pakfire_file_get_group(struct pakfire_file* file) { return file->group; } -PAKFIRE_EXPORT void pakfire_file_set_group(struct pakfire_file* file, const char* group) { - pakfire_string_set(file->group, group); +PAKFIRE_EXPORT int pakfire_file_set_group(struct pakfire_file* file, const char* group) { + return pakfire_string_set(file->group, group); } PAKFIRE_EXPORT mode_t pakfire_file_get_mode(struct pakfire_file* file) { diff --git a/src/libpakfire/include/pakfire/file.h b/src/libpakfire/include/pakfire/file.h index 61b144a19..accb6e2b9 100644 --- a/src/libpakfire/include/pakfire/file.h +++ b/src/libpakfire/include/pakfire/file.h @@ -50,10 +50,10 @@ ssize_t pakfire_file_get_size(struct pakfire_file* file); void pakfire_file_set_size(struct pakfire_file* file, ssize_t size); const char* pakfire_file_get_user(struct pakfire_file* file); -void pakfire_file_set_user(struct pakfire_file* file, const char* user); +int pakfire_file_set_user(struct pakfire_file* file, const char* user); const char* pakfire_file_get_group(struct pakfire_file* file); -void pakfire_file_set_group(struct pakfire_file* file, const char* group); +int pakfire_file_set_group(struct pakfire_file* file, const char* group); mode_t pakfire_file_get_mode(struct pakfire_file* file); void pakfire_file_set_mode(struct pakfire_file* file, mode_t mode);