52 lines
1.6 KiB
Diff
52 lines
1.6 KiB
Diff
|
From 97a05b57c3e86a96ff0ca2c4771cf74ff5b05061 Mon Sep 17 00:00:00 2001
|
||
|
From: Jardel Weyrich <jweyrich@gmail.com>
|
||
|
Date: Mon, 17 Jul 2017 11:55:15 -0300
|
||
|
Subject: [PATCH 06/12] Fixes #116. Thanks to Jakub Wilk!
|
||
|
|
||
|
print_basic_hash() declares the output buffer as:
|
||
|
|
||
|
char hash_value[EVP_MAX_MD_SIZE * 2 + 1];
|
||
|
|
||
|
With the current OpenSSL versions, EVP_MAX_MD_SIZE * 2 + 1 is 129.
|
||
|
However, fuzzy_hash_buf() requires an output buffer of size
|
||
|
FUZZY_MAX_RESULT, which is 148.
|
||
|
---
|
||
|
src/pehash.c | 14 +++++++++++---
|
||
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git src/pehash.c src/pehash.c
|
||
|
index e49f0c1..f1e6b4c 100644
|
||
|
--- src/pehash.c
|
||
|
+++ src/pehash.c
|
||
|
@@ -229,16 +229,24 @@ static void calc_hash(const char *alg_name, const unsigned char *data, size_t si
|
||
|
|
||
|
static void print_basic_hash(const unsigned char *data, size_t size)
|
||
|
{
|
||
|
- char *basic_hashes[] = { "md5", "sha1", "sha256", "ssdeep" };
|
||
|
- char hash_value[EVP_MAX_MD_SIZE * 2 + 1];
|
||
|
-
|
||
|
if (!data || !size)
|
||
|
return;
|
||
|
|
||
|
+ const size_t openssl_hash_maxsize = EVP_MAX_MD_SIZE * 2 + 1;
|
||
|
+ const size_t ssdeep_hash_maxsize = FUZZY_MAX_RESULT;
|
||
|
+ // Since standard C lacks max(), we do it manually.
|
||
|
+ const size_t hash_maxsize = openssl_hash_maxsize > ssdeep_hash_maxsize
|
||
|
+ ? openssl_hash_maxsize
|
||
|
+ : ssdeep_hash_maxsize;
|
||
|
+ const char *basic_hashes[] = { "md5", "sha1", "sha256", "ssdeep" };
|
||
|
+ char *hash_value = malloc_s(hash_maxsize);
|
||
|
+
|
||
|
for (unsigned i=0; i < sizeof(basic_hashes) / sizeof(char *); i++) {
|
||
|
calc_hash(basic_hashes[i], data, size, hash_value);
|
||
|
output(basic_hashes[i], hash_value);
|
||
|
}
|
||
|
+
|
||
|
+ free(hash_value);
|
||
|
}
|
||
|
|
||
|
typedef struct element {
|
||
|
--
|
||
|
2.26.2.672.g232c24e857
|
||
|
|