From 25c96cc3acbe4b977a640963f8aaf5005465db99 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 22 Jul 2016 06:46:15 +0200 Subject: [PATCH] fire: Plug memory leak when missile defense sinks firing ships do_defdam() iterates over the list firing ships, applies return fire to each, and frees its list element. When it finds a ship that has been sunk already, it skips it. This also skips the free, leaking the list element. The leak goes back to flawed bug fix in Empire 2. As far as I can see, missile defense is the only way a ship can be sunk there. Signed-off-by: Markus Armbruster --- src/lib/commands/mfir.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/commands/mfir.c b/src/lib/commands/mfir.c index 29d27cba..2cf71928 100644 --- a/src/lib/commands/mfir.c +++ b/src/lib/commands/mfir.c @@ -427,6 +427,7 @@ multifire(void) else odds = 1.0; do_defdam(&fired, odds); + free_flist(&fired); return RET_OK; } @@ -496,8 +497,6 @@ do_defdam(struct emp_qelem *list, double odds) wu(0, vict, "Return fire hit sector %s for %d damage.\n", xyas(fp->x, fp->y, vict), dam); } - emp_remque(&fp->queue); - free(fp); } }