From: Ingo Schwarze Date: Wed, 7 May 2014 15:10:36 +0000 (+0000) Subject: Fix two memory leaks in makewhatis -n: X-Git-Tag: VERSION_1_13_1~153 X-Git-Url: https://git.cameronkatri.com/mandoc.git/commitdiff_plain/ad9934ce8bce7df653e1eec762a8e13b6ca42b55?ds=inline Fix two memory leaks in makewhatis -n: 1. As found by nigel@, names_check() requires database access. 2. Do not leak names and strings in -n mode. --- diff --git a/mandocdb.c b/mandocdb.c index f9e04602..85f0cca0 100644 --- a/mandocdb.c +++ b/mandocdb.c @@ -1,4 +1,4 @@ -/* $Id: mandocdb.c,v 1.146 2014/04/27 23:08:56 schwarze Exp $ */ +/* $Id: mandocdb.c,v 1.147 2014/05/07 15:10:36 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze @@ -512,7 +512,7 @@ main(int argc, char *argv[]) goto out; mpages_merge(mc, mp); - if (warnings && + if (warnings && !nodb && ! (MPARSE_QUICK & mparse_options)) names_check(); dbclose(0); @@ -1996,6 +1996,18 @@ dbadd(struct mpage *mpage, struct mchars *mc) mlink = mpage->mlinks; if (nodb) { + for (key = ohash_first(&names, &slot); NULL != key; + key = ohash_next(&names, &slot)) { + if (key->rendered != key->key) + free(key->rendered); + free(key); + } + for (key = ohash_first(&strings, &slot); NULL != key; + key = ohash_next(&strings, &slot)) { + if (key->rendered != key->key) + free(key->rendered); + free(key); + } if (0 == debug) return; while (NULL != mlink) {