From: Michael Tremer Date: Thu, 12 Dec 2019 12:16:19 +0000 (+0000) Subject: database: Catch any errors from EVP_DigestVerify_Update() X-Git-Tag: 0.9.1~88 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e7f4b2ce9ea93f1977cf57845d17358fa7790d97;p=location%2Flibloc.git database: Catch any errors from EVP_DigestVerify_Update() Signed-off-by: Michael Tremer --- diff --git a/src/database.c b/src/database.c index fcf40a0..77c9ebd 100644 --- a/src/database.c +++ b/src/database.c @@ -454,7 +454,14 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) { EVP_MD_CTX* mdctx = EVP_MD_CTX_new(); // Initialise hash function - EVP_DigestVerifyInit(mdctx, NULL, NULL, NULL, pkey); + r = EVP_DigestVerifyInit(mdctx, NULL, NULL, NULL, pkey); + if (r != 1) { + ERROR(db->ctx, "Error initializing signature validation: %s\n", + ERR_error_string(ERR_get_error(), NULL)); + r = 1; + + goto CLEANUP; + } // Reset file to start rewind(db->f); @@ -464,7 +471,13 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) { fread(&magic, 1, sizeof(magic), db->f); // Feed magic into the hash - EVP_DigestVerifyUpdate(mdctx, &magic, sizeof(magic)); + r = EVP_DigestVerifyUpdate(mdctx, &magic, sizeof(magic)); + if (r != 1) { + ERROR(db->ctx, "%s\n", ERR_error_string(ERR_get_error(), NULL)); + r = 1; + + goto CLEANUP; + } // Read the header struct loc_database_header_v0 header_v0; @@ -480,6 +493,12 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) { // Feed header into the hash EVP_DigestVerifyUpdate(mdctx, &header_v0, sizeof(header_v0)); + if (r != 1) { + ERROR(db->ctx, "%s\n", ERR_error_string(ERR_get_error(), NULL)); + r = 1; + + goto CLEANUP; + } break; default: @@ -495,7 +514,13 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) { while (!feof(db->f)) { size_t bytes_read = fread(buffer, 1, sizeof(buffer), db->f); - EVP_DigestVerifyUpdate(mdctx, buffer, bytes_read); + r = EVP_DigestVerifyUpdate(mdctx, buffer, bytes_read); + if (r != 1) { + ERROR(db->ctx, "%s\n", ERR_error_string(ERR_get_error(), NULL)); + r = 1; + + goto CLEANUP; + } } // Finish