diff --git a/bin/xbps-rindex/repoflush.c b/bin/xbps-rindex/repoflush.c index 717366bb..eb08bcfa 100644 --- a/bin/xbps-rindex/repoflush.c +++ b/bin/xbps-rindex/repoflush.c @@ -60,34 +60,37 @@ repodata_flush(struct xbps_handle *xhp, const char *repodir, umask(mask); /* Create and write our repository archive */ ar = archive_write_new(); - assert(ar); + if (ar == NULL) + return false; - if (compression == NULL || strcmp(compression, "gzip") == 0) { - archive_write_add_filter_gzip(ar); - archive_write_set_options(ar, "compression-level=9"); - } else if (strcmp(compression, "bzip2") == 0) { - archive_write_add_filter_bzip2(ar); - archive_write_set_options(ar, "compression-level=9"); - } else if (strcmp(compression, "lz4") == 0) { - archive_write_add_filter_lz4(ar); - archive_write_set_options(ar, "compression-level=9"); - } else if (strcmp(compression, "xz") == 0) { - archive_write_add_filter_xz(ar); - } else if (strcmp(compression, "zstd") == 0) { - archive_write_add_filter_zstd(ar); - archive_write_set_options(ar, "compression-level=19"); + if (compression == NULL || strcmp(compression, "gzip") == 0) { + archive_write_add_filter_gzip(ar); + archive_write_set_options(ar, "compression-level=9"); + } else if (strcmp(compression, "bzip2") == 0) { + archive_write_add_filter_bzip2(ar); + archive_write_set_options(ar, "compression-level=9"); + } else if (strcmp(compression, "lz4") == 0) { + archive_write_add_filter_lz4(ar); + archive_write_set_options(ar, "compression-level=9"); + } else if (strcmp(compression, "xz") == 0) { + archive_write_add_filter_xz(ar); + } else if (strcmp(compression, "zstd") == 0) { + archive_write_add_filter_zstd(ar); + archive_write_set_options(ar, "compression-level=19"); } else if (strcmp(compression, "none") == 0) { - /* empty */ - } else { + /* empty */ + } else { return false; } archive_write_set_format_pax_restricted(ar); - archive_write_open_fd(ar, repofd); + if (archive_write_open_fd(ar, repofd) != ARCHIVE_OK) + return false; /* XBPS_REPOIDX */ buf = xbps_dictionary_externalize(idx); - assert(buf); + if (buf == NULL) + return false; rv = xbps_archive_append_buf(ar, buf, strlen(buf), XBPS_REPOIDX, 0644, "root", "root"); free(buf); @@ -98,6 +101,8 @@ repodata_flush(struct xbps_handle *xhp, const char *repodir, if (meta == NULL) { /* fake entry */ buf = strdup("DEADBEEF"); + if (buf == NULL) + return false; } else { buf = xbps_dictionary_externalize(meta); } @@ -108,7 +113,10 @@ repodata_flush(struct xbps_handle *xhp, const char *repodir, return false; /* Write data to tempfile and rename */ - archive_write_finish(ar); + if (archive_write_close(ar) != ARCHIVE_OK) + return false; + if (archive_write_free(ar) != ARCHIVE_OK) + return false; #ifdef HAVE_FDATASYNC fdatasync(repofd); #else diff --git a/lib/archive.c b/lib/archive.c index f1c56f42..94cba292 100644 --- a/lib/archive.c +++ b/lib/archive.c @@ -83,7 +83,8 @@ xbps_archive_append_buf(struct archive *ar, const void *buf, const size_t buflen assert(gname); entry = archive_entry_new(); - assert(entry); + if (entry == NULL) + return archive_errno(ar); archive_entry_set_filetype(entry, AE_IFREG); archive_entry_set_perm(entry, mode); @@ -100,7 +101,10 @@ xbps_archive_append_buf(struct archive *ar, const void *buf, const size_t buflen archive_entry_free(entry); return archive_errno(ar); } - archive_write_finish_entry(ar); + if (archive_write_finish_entry(ar) != ARCHIVE_OK) { + archive_entry_free(entry); + return archive_errno(ar); + } archive_entry_free(entry); return 0;