From d5b04ab19cf2273becb0b95274964c02f8b26c66 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Sun, 16 Aug 2020 22:01:42 +0200 Subject: [PATCH] test: Fix short lived memory leaks These are non-issues, but having a clean ASAN test suite makes it possible to detect actual problems in the tested code. Warned-by: gcc ASAN --- test/fgetln.c | 13 +++++++++++-- test/setmode.c | 20 ++++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/test/fgetln.c b/test/fgetln.c index 7d1e9dc..5e04281 100644 --- a/test/fgetln.c +++ b/test/fgetln.c @@ -61,6 +61,7 @@ static const wchar_t *data_wide[] = { struct file { FILE *fp; + void *line_alloc; const void **lines; const void *got_buf; @@ -97,6 +98,7 @@ test_fgetln_multi(void) str = strdup("A\n"); str[0] += i; + files[i].line_alloc = str; files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *)); files[i].lines[0] = str; files[i].lines[1] = str; @@ -123,8 +125,11 @@ test_fgetln_multi(void) } } - for (i = 0; i < LINE_COUNT; i++) + for (i = 0; i < FILE_COUNT; i++) { + free(files[i].line_alloc); + free(files[i].lines); pipe_close(files[i].fp); + } } static void @@ -159,6 +164,7 @@ test_fgetwln_multi(void) wstr = wcsdup(L"A\n"); wstr[0] += i; + files[i].line_alloc = wstr; files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *)); files[i].lines[0] = wstr; files[i].lines[1] = wstr; @@ -185,8 +191,11 @@ test_fgetwln_multi(void) } } - for (i = 0; i < LINE_COUNT; i++) + for (i = 0; i < FILE_COUNT; i++) { + free(files[i].line_alloc); + free(files[i].lines); pipe_close(files[i].fp); + } } static void diff --git a/test/setmode.c b/test/setmode.c index c6fbcba..c72deb8 100644 --- a/test/setmode.c +++ b/test/setmode.c @@ -25,19 +25,31 @@ */ #include +#include #include int main(int argc, char **argv) { + void *set; + umask(0); - assert(getmode(setmode("0"), 0) == 0); + set = setmode("0"); + assert(getmode(set, 0) == 0); + free(set); - assert(getmode(setmode("7777"), 0) == 07777); - assert(getmode(setmode("1555"), 0) == 01555); + set = setmode("7777"); + assert(getmode(set, 0) == 07777); + free(set); - assert(getmode(setmode("ugo=rwx"), 0) == 0777); + set = setmode("1555"); + assert(getmode(set, 0) == 01555); + free(set); + + set = setmode("ugo=rwx"); + assert(getmode(set, 0) == 0777); + free(set); /* FIXME: Complete unit tests. */