From 2dae23e41126efb0158b001a8c25ec2a786014b1 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Tue, 25 Apr 2017 09:50:08 +0200 Subject: tests: added base64 reproducer of mem leak Signed-off-by: Nikos Mavrogiannopoulos --- tests/base64.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/base64.c b/tests/base64.c index 9c89cb3ad0..7851e04877 100644 --- a/tests/base64.c +++ b/tests/base64.c @@ -80,13 +80,17 @@ static void encode(const char *test_name, const gnutls_datum_t *raw, const char return; } -static void decode(const char *test_name, const gnutls_datum_t *raw, const char *hex, int res) +static void decode(const char *test_name, const gnutls_datum_t *raw, const char *hex, unsigned hex_size, int res) { int ret; gnutls_datum_t out, in; in.data = (void*)hex; - in.size = strlen(hex); + if (hex_size == 0) + in.size = strlen(hex); + else + in.size = hex_size; + ret = gnutls_pem_base64_decode2(test_name, &in, &out); if (ret < 0) { if (res == ret) /* expected */ @@ -170,6 +174,7 @@ struct decode_tests_st { const char *name; gnutls_datum_t raw; const char *pem; + unsigned pem_size; int res; }; @@ -214,6 +219,13 @@ struct decode_tests_st decode_tests[] = { .raw = {(void*)"\x2c\x9f\xfb\x85\x46\x77\x4e\xd3\xc8\xcf\x67\x65\x73\x9f\x98\xbc\x42\xde\xf9", 19}, .res = GNUTLS_E_BASE64_DECODING_ERROR }, + { + .name = "leak1", + .pem = "-----BEGIN leak1-----E-\x00\x00-----END ", + .pem_size = 34, + .raw = {(void*)"", 0}, + .res = GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR + }, { .name = "dec-invalid-suffix", .pem = "-----BEGIN dec-invalid-suffix-----\n" @@ -233,7 +245,7 @@ void doit(void) } for (i=0;i