summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2013-07-07 19:52:13 -0400
committerAllan McRae <allan@archlinux.org>2013-07-22 13:26:56 +1000
commit24abcddc574be22b82095ea647209e072080764a (patch)
tree5618409e9baee44d21420873c9f584e4e0351330
parentef6b6fe06572c75628943fee7067b1ef453c672a (diff)
downloadpacman-24abcddc574be22b82095ea647209e072080764a.tar.xz
be_sync: avoid crashing on files in the root of a DB
If a sync DB is malformed and contains entries in the root of the archive, load_pkg_for_entry will leave the 'filename' variable empty, leading to a crash in the ensuing strcmp() calls which determine the DB fragment being examined. While this isn't a read error, this should be reported to the user so that it can be addressed by the creator of the DB. As seen: https://bbs.archlinux.org/viewtopic.php?pid=1297766 Signed-off-by: Dave Reisner <dreisner@archlinux.org>
-rw-r--r--lib/libalpm/be_sync.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index bd68739f..0b996843 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -562,6 +562,14 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
return -1;
}
+ if(filename == NULL) {
+ /* A file exists outside of a subdirectory. This isn't a read error, so return
+ * success and try to continue on. */
+ _alpm_log(db->handle, ALPM_LOG_WARNING, _("unknown database file: %s\n"),
+ filename);
+ return 0;
+ }
+
if(strcmp(filename, "desc") == 0 || strcmp(filename, "depends") == 0
|| (strcmp(filename, "deltas") == 0 && db->handle->deltaratio > 0.0) ) {
int ret;