mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-23 14:40:51 +01:00
Improved fix for test_memeq_hex leak.
The earlier fix would only handle the success case. In the failing case, test_mem_op does a goto done, which would leave the leak leaking.
This commit is contained in:
parent
a24b9e6088
commit
008dc890d8
2 changed files with 10 additions and 4 deletions
|
@ -51,14 +51,16 @@
|
|||
#define test_memeq(expr1, expr2, len) test_mem_op((expr1), ==, (expr2), len)
|
||||
#define test_memneq(expr1, expr2, len) test_mem_op((expr1), !=, (expr2), len)
|
||||
|
||||
/* As test_mem_op, but decodes 'hex' before comparing. There must be a
|
||||
* local char* variable called mem_op_hex_tmp for this to work. */
|
||||
#define test_mem_op_hex(expr1, op, hex) \
|
||||
STMT_BEGIN \
|
||||
size_t length = strlen(hex); \
|
||||
char *value2 = tor_malloc(length/2); \
|
||||
tor_free(mem_op_hex_tmp); \
|
||||
mem_op_hex_tmp = tor_malloc(length/2); \
|
||||
tor_assert((length&1)==0); \
|
||||
base16_decode(value2, length/2, hex, length); \
|
||||
test_mem_op(expr1, op, value2, length/2); \
|
||||
tor_free(value2); \
|
||||
base16_decode(mem_op_hex_tmp, length/2, hex, length); \
|
||||
test_mem_op(expr1, op, mem_op_hex_tmp, length/2); \
|
||||
STMT_END
|
||||
|
||||
#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, ==, hex)
|
||||
|
|
|
@ -96,6 +96,7 @@ test_crypto_aes(void)
|
|||
char *data1 = NULL, *data2 = NULL, *data3 = NULL;
|
||||
crypto_cipher_env_t *env1 = NULL, *env2 = NULL;
|
||||
int i, j;
|
||||
char *mem_op_hex_tmp=NULL;
|
||||
|
||||
data1 = tor_malloc(1024);
|
||||
data2 = tor_malloc(1024);
|
||||
|
@ -210,6 +211,7 @@ test_crypto_aes(void)
|
|||
test_assert(tor_mem_is_zero(data2, 64));
|
||||
|
||||
done:
|
||||
tor_free(mem_op_hex_tmp);
|
||||
if (env1)
|
||||
crypto_free_cipher_env(env1);
|
||||
if (env2)
|
||||
|
@ -229,6 +231,7 @@ test_crypto_sha(void)
|
|||
char digest[32];
|
||||
char data[50];
|
||||
char d_out1[DIGEST_LEN], d_out2[DIGEST256_LEN];
|
||||
char *mem_op_hex_tmp=NULL;
|
||||
|
||||
/* Test SHA-1 with a test vector from the specification. */
|
||||
i = crypto_digest(data, "abc", 3);
|
||||
|
@ -312,6 +315,7 @@ test_crypto_sha(void)
|
|||
crypto_free_digest_env(d1);
|
||||
if (d2)
|
||||
crypto_free_digest_env(d2);
|
||||
tor_free(mem_op_hex_tmp);
|
||||
}
|
||||
|
||||
/** Run unit tests for our public key crypto functions */
|
||||
|
|
Loading…
Add table
Reference in a new issue