summaryrefslogtreecommitdiff
path: root/src/hash
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2017-12-08 10:10:19 +0000
committerPatrick Steinhardt <ps@pks.im>2018-01-03 12:49:11 +0000
commit75e1737a5173709b14b669bf08dae78232c6389d (patch)
tree23f954fb13c048f16e2c0ece2faf92cb0b2286c1 /src/hash
parent1bf173c33a217a2e4766d8c144b7935010dfa7d6 (diff)
downloadlibgit2-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/hash')
-rw-r--r--src/hash/hash_openssl.h21
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;
}