aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2021-10-04 20:24:06 +0000
committerIngo Schwarze <schwarze@openbsd.org>2021-10-04 20:24:06 +0000
commit754f01c4be9fff22d32351a29e4bcdd5b1d24cf5 (patch)
tree44b9beb6968d6be3d3493fe9cca0cc005e05850e
parent73ca35878e62a5eb1bbcdc738e8969dd8516a313 (diff)
downloadmandoc-754f01c4be9fff22d32351a29e4bcdd5b1d24cf5.tar.gz
mandoc-754f01c4be9fff22d32351a29e4bcdd5b1d24cf5.tar.zst
mandoc-754f01c4be9fff22d32351a29e4bcdd5b1d24cf5.zip
In man(1) mode, properly clean up the resn[] result array
after processing each name given on the command line. Failure to do so resulted in a memory leak of about 50 kilobytes per name given on the command line. Since man(1) uses a few Megabytes of memory anyway and people rarely give hundreds of names on the command line, this leak did not cause practical problems, but cleaning up properly is better in any case.
-rw-r--r--main.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/main.c b/main.c
index c5a7cff9..c23a1a7f 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.358 2021/09/04 22:38:46 schwarze Exp $ */
+/* $Id: main.c,v 1.359 2021/10/04 20:24:06 schwarze Exp $ */
/*
* Copyright (c) 2010-2012, 2014-2021 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -516,6 +516,9 @@ main(int argc, char *argv[])
memcpy(res + ressz, resn,
sizeof(*resn) * resnsz);
ressz += resnsz;
+ free(resn);
+ resn = NULL;
+ resnsz = 0;
continue;
}
@@ -554,6 +557,10 @@ main(int argc, char *argv[])
res = mandoc_reallocarray(res, ressz + 1,
sizeof(*res));
memcpy(res + ressz++, resn + ib, sizeof(*resn));
+ memset(resn + ib, 0, sizeof(*resn));
+ mansearch_free(resn, resnsz);
+ resn = NULL;
+ resnsz = 0;
}
/* apropos(1), whatis(1): Process the full search expression. */