diff options
author | Patrick Steinhardt <ps@pks.im> | 2017-12-08 10:10:19 +0000 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2018-01-03 12:49:11 +0000 |
commit | 75e1737a5173709b14b669bf08dae78232c6389d (patch) | |
tree | 23f954fb13c048f16e2c0ece2faf92cb0b2286c1 /src | |
parent | 1bf173c33a217a2e4766d8c144b7935010dfa7d6 (diff) | |
download | libgit2-75e1737a5173709b14b669bf08dae78232c6389d.tar.gz |
hash: openssl: check return values of SHA1_* functions
The OpenSSL functions `SHA1_Init`, `SHA1_Update` and `SHA1_Final` all
return 1 for success and 0 otherwise, but we never check their return
values. Do so.
Diffstat (limited to 'src')
-rw-r--r-- | src/hash/hash_openssl.h | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/hash/hash_openssl.h b/src/hash/hash_openssl.h index 9a55d472d..048c2bdb3 100644 --- a/src/hash/hash_openssl.h +++ b/src/hash/hash_openssl.h @@ -23,21 +23,36 @@ struct git_hash_ctx { GIT_INLINE(int) git_hash_init(git_hash_ctx *ctx) { assert(ctx); - SHA1_Init(&ctx->c); + + if (SHA1_Init(&ctx->c) != 1) { + giterr_set(GITERR_SHA1, "hash_openssl: failed to initialize hash context"); + return -1; + } + return 0; } GIT_INLINE(int) git_hash_update(git_hash_ctx *ctx, const void *data, size_t len) { assert(ctx); - SHA1_Update(&ctx->c, data, len); + + if (SHA1_Update(&ctx->c, data, len) != 1) { + giterr_set(GITERR_SHA1, "hash_openssl: failed to update hash"); + return -1; + } + return 0; } GIT_INLINE(int) git_hash_final(git_oid *out, git_hash_ctx *ctx) { assert(ctx); - SHA1_Final(out->id, &ctx->c); + + if (SHA1_Final(out->id, &ctx->c) != 1) { + giterr_set(GITERR_SHA1, "hash_openssl: failed to finalize hash"); + return -1; + } + return 0; } |