]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Show better error when digest check fails
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Nov 2022 18:21:11 +0000 (18:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Nov 2022 18:21:11 +0000 (18:21 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index 7a61b5d3245bd9588017b3900a2660c2bf288ba4..f33d1a28b4456b307b43e0c7ce915ddb792e8880 100644 (file)
@@ -959,6 +959,7 @@ PAKFIRE_EXPORT ssize_t pakfire_archive_get_size(struct pakfire_archive* archive)
 
 int pakfire_archive_check_digest(struct pakfire_archive* archive,
                const enum pakfire_digest_types type, const unsigned char* digest, const size_t length) {
+       size_t computed_length = 0;
        int r;
 
        // Compute the digest
@@ -970,7 +971,22 @@ int pakfire_archive_check_digest(struct pakfire_archive* archive,
        r = pakfire_digests_compare_one(archive->pakfire, &archive->digests,
                type, digest, length);
        if (r) {
-               ERROR(archive->pakfire, "Archive digest does not match");
+               const unsigned char* computed_digest = pakfire_digest_get(
+                       &archive->digests, type, &computed_length);
+
+               char* expected_hexdigest = __pakfire_hexlify(digest, length);
+               char* computed_hexdigest = __pakfire_hexlify(computed_digest, computed_length);
+
+               ERROR(archive->pakfire, "Archive digest does not match for %s:\n", archive->path);
+               ERROR(archive->pakfire, "  Expected: %s\n", expected_hexdigest);
+               ERROR(archive->pakfire, "  Computed: %s\n", computed_hexdigest);
+
+               if (expected_hexdigest)
+                       free(expected_hexdigest);
+               if (computed_hexdigest)
+                       free(computed_hexdigest);
+
+               return r;
        }
 
        return r;