]> git.pond.sub.org Git - empserver/commitdiff
navigate march: Plug memory leaks
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 20 Sep 2015 13:24:22 +0000 (15:24 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 5 Dec 2015 11:51:07 +0000 (12:51 +0100)
When the player aborts the command at the movement prompt, or declines
to abandon a sector, unit_move() returns without freeing the list.
Found with valgrind.  Broken in commit 24000b4 and commit 7c1b166,
both v4.3.33.

Free the list on these returns, too.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
src/lib/subs/unitsub.c
tests/navi-march/journal.log

index b1ead5cad1999d2de8a90fe914baeffacf464ec8..7b903d4dd9b18acf4dc523df22634050eba0eb71 100644 (file)
@@ -406,8 +406,13 @@ unit_move(struct emp_qelem *list)
         */
        if (!*cp) {
            cp = unit_move_getpath(list, suppress_map, path);
-           if (!cp)
+           if (!cp) {
+               if (type == EF_SHIP)
+                   shp_nav_put(list, player->cnum);
+               else
+                   lnd_mar_put(list, player->cnum);
                return RET_FAIL;
+           }
            cp = unit_move_route(leader, path, sizeof(path));
            if (!cp || !*cp)
                cp = "h";
@@ -418,13 +423,17 @@ unit_move(struct emp_qelem *list)
                stopping = shp_nav_dir(list, dir, player->cnum)
                    || shp_nav_gauntlet(list, 1, player->cnum);
            else {
-               if (!moved && !lnd_abandon_askyn(list))
+               if (!moved && !lnd_abandon_askyn(list)) {
+                   lnd_mar_put(list, player->cnum);
                    return RET_FAIL;
+               }
                stopping = lnd_mar_dir(list, dir, player->cnum)
                    || lnd_mar_gauntlet(list, 1, player->cnum);
            }
-           if (dir == DIR_STOP)
+           if (dir == DIR_STOP) {
+               CANT_HAPPEN(!QEMPTY(list));
                return RET_OK;
+           }
            moved = 1;
            if (stopping)
                cp = "";
index 13985d960dd84eb65e7e476609f7bb5dad4cee42..78a87b7ae791697c8ab556817fd2c9a135e37fd6 100644 (file)
     Play#1 output Play#1 1 Leader is cav  cavalry #78
     Play#1 output Play#1 4 Do you really want to abandon 3,7 [yn]?
     Play#1 input n
+    Play#1 output Play#1 1 cav  cavalry #78 stopped at 3,7
+    Play#1 output Play#1 1 cav  cavalry #79 stopped at 3,7
     Play#1 output Play#1 1 command failed
     Play#1 output Play#1 6 0 567
     Play#1 input march 84/83/80/81/82