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
This commit is contained in:
Guillem Jover 2020-08-16 22:01:42 +02:00
parent cfeafeabad
commit d5b04ab19c
2 changed files with 27 additions and 6 deletions

View File

@ -61,6 +61,7 @@ static const wchar_t *data_wide[] = {
struct file { struct file {
FILE *fp; FILE *fp;
void *line_alloc;
const void **lines; const void **lines;
const void *got_buf; const void *got_buf;
@ -97,6 +98,7 @@ test_fgetln_multi(void)
str = strdup("A\n"); str = strdup("A\n");
str[0] += i; str[0] += i;
files[i].line_alloc = str;
files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *)); files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *));
files[i].lines[0] = str; files[i].lines[0] = str;
files[i].lines[1] = str; files[i].lines[1] = str;
@ -123,9 +125,12 @@ 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); pipe_close(files[i].fp);
} }
}
static void static void
test_fgetwln_single(void) test_fgetwln_single(void)
@ -159,6 +164,7 @@ test_fgetwln_multi(void)
wstr = wcsdup(L"A\n"); wstr = wcsdup(L"A\n");
wstr[0] += i; wstr[0] += i;
files[i].line_alloc = wstr;
files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *)); files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *));
files[i].lines[0] = wstr; files[i].lines[0] = wstr;
files[i].lines[1] = wstr; files[i].lines[1] = wstr;
@ -185,9 +191,12 @@ 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); pipe_close(files[i].fp);
} }
}
static void static void
test_fgetwln(void) test_fgetwln(void)

View File

@ -25,19 +25,31 @@
*/ */
#include <assert.h> #include <assert.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
void *set;
umask(0); umask(0);
assert(getmode(setmode("0"), 0) == 0); set = setmode("0");
assert(getmode(set, 0) == 0);
free(set);
assert(getmode(setmode("7777"), 0) == 07777); set = setmode("7777");
assert(getmode(setmode("1555"), 0) == 01555); 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. */ /* FIXME: Complete unit tests. */