]> git.cameronkatri.com Git - mandoc.git/commitdiff
In man(1) mode, properly clean up the resn[] result array
authorIngo Schwarze <schwarze@openbsd.org>
Mon, 4 Oct 2021 20:24:06 +0000 (20:24 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Mon, 4 Oct 2021 20:24:06 +0000 (20:24 +0000)
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.

main.c

diff --git a/main.c b/main.c
index c5a7cff918ab681846f5fb0dde9293f7f08fde25..c23a1a7fdf0d4a352458f998e5a6a774ede0b41b 100644 (file)
--- 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. */