]> git.ipfire.org Git - pakfire.git/commitdiff
digests: Don't let computation fail if not all types are selected
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Aug 2022 16:06:55 +0000 (16:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Aug 2022 16:06:55 +0000 (16:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/digest.c

index 4d4dbb8ab18d7d841707db419a60c0eed1424a72..de99f6db69852acca95361fdc55723050e65ce4b 100644 (file)
@@ -122,40 +122,48 @@ int pakfire_digests_compute_from_file(struct pakfire* pakfire,
                }
 
                // SHA-512
-               r = EVP_DigestUpdate(sha512_ctx, buffer, bytes_read);
-               if (r != 1) {
-                       ERROR(pakfire, "EVP_Digest_Update() failed: %s\n",
-                               ERR_error_string(ERR_get_error(), NULL));
-                       r = 1;
-                       goto ERROR;
+               if (sha512_ctx) {
+                       r = EVP_DigestUpdate(sha512_ctx, buffer, bytes_read);
+                       if (r != 1) {
+                               ERROR(pakfire, "EVP_Digest_Update() failed: %s\n",
+                                       ERR_error_string(ERR_get_error(), NULL));
+                               r = 1;
+                               goto ERROR;
+                       }
                }
 
                // SHA-256
-               r = EVP_DigestUpdate(sha256_ctx, buffer, bytes_read);
+               if (sha256_ctx) {
+                       r = EVP_DigestUpdate(sha256_ctx, buffer, bytes_read);
+                       if (r != 1) {
+                               ERROR(pakfire, "EVP_Digest_Update() failed: %s\n",
+                                       ERR_error_string(ERR_get_error(), NULL));
+                               r = 1;
+                               goto ERROR;
+                       }
+               }
+       }
+
+       // Finalize SHA-512
+       if (sha512_ctx) {
+               r = EVP_DigestFinal_ex(sha512_ctx, digests->sha512, NULL);
                if (r != 1) {
-                       ERROR(pakfire, "EVP_Digest_Update() failed: %s\n",
+                       ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n",
                                ERR_error_string(ERR_get_error(), NULL));
                        r = 1;
                        goto ERROR;
                }
        }
 
-       // Finalize SHA-512
-       r = EVP_DigestFinal_ex(sha512_ctx, digests->sha512, NULL);
-       if (r != 1) {
-               ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n",
-                       ERR_error_string(ERR_get_error(), NULL));
-               r = 1;
-               goto ERROR;
-       }
-
        // Finalize SHA-256
-       r = EVP_DigestFinal_ex(sha256_ctx, digests->sha256, NULL);
-       if (r != 1) {
-               ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n",
-                       ERR_error_string(ERR_get_error(), NULL));
-               r = 1;
-               goto ERROR;
+       if (sha256_ctx) {
+               r = EVP_DigestFinal_ex(sha256_ctx, digests->sha256, NULL);
+               if (r != 1) {
+                       ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n",
+                               ERR_error_string(ERR_get_error(), NULL));
+                       r = 1;
+                       goto ERROR;
+               }
        }
 
 ERROR: