From b5309c0623b5e9a3912364823f4c2b313fb0a495 Mon Sep 17 00:00:00 2001 From: Jonathan Dieter Date: Sat, 1 Dec 2018 17:30:30 +0000 Subject: [PATCH] Fix memory leak and error when closing after error Signed-off-by: Jonathan Dieter --- src/lib/comp/nocomp/nocomp.c | 2 +- src/lib/comp/zstd/zstd.c | 2 +- src/lib/zck.c | 10 +++++----- test/invalid_input_checksum.c | 2 ++ 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/lib/comp/nocomp/nocomp.c b/src/lib/comp/nocomp/nocomp.c index 60ed9e7..0b9f85a 100644 --- a/src/lib/comp/nocomp/nocomp.c +++ b/src/lib/comp/nocomp/nocomp.c @@ -94,7 +94,7 @@ static bool end_dchunk(zckCtx *zck, zckComp *comp, const bool use_dict, } static bool close(zckCtx *zck, zckComp *comp) { - VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, zck); ALLOCD_BOOL(zck, comp); return true; diff --git a/src/lib/comp/zstd/zstd.c b/src/lib/comp/zstd/zstd.c index 1e98b4f..920a611 100644 --- a/src/lib/comp/zstd/zstd.c +++ b/src/lib/comp/zstd/zstd.c @@ -58,7 +58,7 @@ static bool init(zckCtx *zck, zckComp *comp) { } static bool close(zckCtx *zck, zckComp *comp) { - VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, zck); ALLOCD_BOOL(zck, comp); if(comp->cdict_ctx) { diff --git a/src/lib/zck.c b/src/lib/zck.c index 624416d..dc4e183 100644 --- a/src/lib/zck.c +++ b/src/lib/zck.c @@ -93,12 +93,12 @@ static int hex_to_int (char c) { return result; } -static char *ascii_checksum_to_bin (zckCtx *zck, char *checksum) { - int cl = strlen(checksum); - char *raw_checksum = zmalloc(cl/2); +static char *ascii_checksum_to_bin (zckCtx *zck, char *checksum, + int checksum_length) { + char *raw_checksum = zmalloc(checksum_length/2); char *rp = raw_checksum; int buf = 0; - for (int i=0; iprep_hash_type), data); - zck->prep_digest = ascii_checksum_to_bin(zck, data); + zck->prep_digest = ascii_checksum_to_bin(zck, data, length); free(data); if(zck->prep_digest == NULL) { set_fatal_error(zck, "Non-hex character found in supplied digest"); diff --git a/test/invalid_input_checksum.c b/test/invalid_input_checksum.c index 9b4f109..0e08081 100644 --- a/test/invalid_input_checksum.c +++ b/test/invalid_input_checksum.c @@ -60,7 +60,9 @@ int main (int argc, char *argv[]) { "gbcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789", 64)) { printf("ERROR: setting invalid checksum *worked*\n"); + zck_free(&zck); exit(1); } + zck_free(&zck); printf("%s", zck_get_error(zck)); } -- 2.30.2