Commit 447b194b authored by Timo Teräs's avatar Timo Teräs

index: add sensible error message if metadata is too long

fixes #1476

Instead of:
ERROR: Index generation failed: Success

The following is now printed:
ERROR: Metadata for package timo-1.0-r0 is too long.
ERROR: Index generation failed: No buffer space available
parent aec93ee7
......@@ -874,11 +874,11 @@ static int apk_db_write_fdb(struct apk_database *db, struct apk_ostream *os)
apk_blob_push_blob(&bbuf, APK_BLOB_STR("\n"));
if (os->write(os, buf, bbuf.ptr - buf) != bbuf.ptr - buf)
return -1;
return -EIO;
bbuf = APK_BLOB_BUF(buf);
}
if (os->write(os, buf, bbuf.ptr - buf) != bbuf.ptr - buf)
return -1;
return -EIO;
bbuf = APK_BLOB_BUF(buf);
}
os->write(os, "\n", 1);
......@@ -1101,7 +1101,7 @@ static int write_index_entry(apk_hash_item item, void *ctx)
return r;
if (iwctx->os->write(iwctx->os, "\n", 1) != 1)
return -1;
return -EIO;
iwctx->count++;
return 0;
......@@ -1124,7 +1124,7 @@ static int apk_db_index_write_nr_cache(struct apk_database *db)
"installed.new",
0644);
if (os == NULL)
return -1;
return -EIO;
ctx.os = os;
list_for_each_entry(ipkg, &db->installed.packages, installed_pkgs_list) {
......
......@@ -9,6 +9,7 @@
* by the Free Software Foundation. See http://www.gnu.org/ for details.
*/
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
......@@ -61,7 +62,7 @@ static int index_read_file(struct apk_database *db, struct index_ctx *ictx)
if (ictx->index == NULL)
return 0;
if (apk_file_get_info(AT_FDCWD, ictx->index, APK_CHECKSUM_NONE, &fi) < 0)
return -1;
return -EIO;
ictx->index_mtime = fi.mtime;
return apk_db_index_read_file(db, ictx->index, 0);
......@@ -185,37 +186,41 @@ static int index_main(void *ctx, struct apk_database *db, int argc, char **argv)
if (ictx->method == APK_SIGN_GENERATE) {
struct apk_ostream *counter;
os = apk_ostream_gzip(os);
if (ictx->description != NULL) {
memset(&fi, 0, sizeof(fi));
fi.mode = 0644 | S_IFREG;
fi.name = "DESCRIPTION";
fi.size = strlen(ictx->description);
apk_tar_write_entry(os, &fi, ictx->description);
}
memset(&fi, 0, sizeof(fi));
fi.mode = 0644 | S_IFREG;
fi.name = "APKINDEX";
counter = apk_ostream_counter(&fi.size);
apk_db_index_write(db, counter);
r = apk_db_index_write(db, counter);
counter->close(counter);
apk_tar_write_entry(os, &fi, NULL);
total = apk_db_index_write(db, os);
apk_tar_write_padding(os, &fi);
apk_tar_write_entry(os, NULL, NULL);
if (r >= 0) {
os = apk_ostream_gzip(os);
if (ictx->description != NULL) {
struct apk_file_info fi_desc;
memset(&fi_desc, 0, sizeof(fi));
fi_desc.mode = 0644 | S_IFREG;
fi_desc.name = "DESCRIPTION";
fi_desc.size = strlen(ictx->description);
apk_tar_write_entry(os, &fi_desc, ictx->description);
}
apk_tar_write_entry(os, &fi, NULL);
r = apk_db_index_write(db, os);
apk_tar_write_padding(os, &fi);
apk_tar_write_entry(os, NULL, NULL);
}
} else {
total = apk_db_index_write(db, os);
r = apk_db_index_write(db, os);
}
os->close(os);
if (total < 0) {
if (r < 0) {
apk_error("Index generation failed: %s", apk_error_str(r));
return total;
return r;
}
total = r;
apk_hash_foreach(&db->available.names, warn_if_no_providers, &counts);
if (counts.unsatisfied != 0)
......
......@@ -1156,15 +1156,18 @@ int apk_pkg_write_index_entry(struct apk_package *info,
}
apk_blob_push_blob(&bbuf, APK_BLOB_STR("\n"));
if (APK_BLOB_IS_NULL(bbuf))
return -1;
if (APK_BLOB_IS_NULL(bbuf)) {
apk_error("Metadata for package " PKG_VER_FMT " is too long.",
PKG_VER_PRINTF(info));
return -ENOBUFS;
}
bbuf = apk_blob_pushed(APK_BLOB_BUF(buf), bbuf);
if (os->write(os, bbuf.ptr, bbuf.len) != bbuf.len ||
write_depends(os, "D:", info->depends) ||
write_depends(os, "p:", info->provides) ||
write_depends(os, "i:", info->install_if))
return -1;
return -EIO;
return 0;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment