wincng.c: fixed possible memory leak in _libssh2_wincng_hash
If _libssh2_wincng_hash_update failed _libssh2_wincng_hash_final
would never have been called before.
Reported by Zenju.
diff --git a/src/wincng.c b/src/wincng.c
index 11dbbe3..6fa59d2 100755
--- a/src/wincng.c
+++ b/src/wincng.c
@@ -415,16 +415,15 @@
unsigned char *hash, unsigned long hashlen)
{
_libssh2_wincng_hash_ctx ctx;
+ int ret;
- if (!_libssh2_wincng_hash_init(&ctx, hAlg, hashlen, NULL, 0)) {
- if (!_libssh2_wincng_hash_update(&ctx, data, datalen)) {
- if (!_libssh2_wincng_hash_final(&ctx, hash)) {
- return 0;
- }
- }
+ ret = _libssh2_wincng_hash_init(&ctx, hAlg, hashlen, NULL, 0);
+ if (!ret) {
+ ret = _libssh2_wincng_hash_update(&ctx, data, datalen);
+ ret |= _libssh2_wincng_hash_final(&ctx, hash);
}
- return -1;
+ return ret;
}