]> granicus.if.org Git - nethack/commitdiff
plug potential open file leak in checkfile()
authorPatR <rankin@nethack.org>
Tue, 18 Dec 2018 10:44:21 +0000 (02:44 -0800)
committerPatR <rankin@nethack.org>
Tue, 18 Dec 2018 10:44:21 +0000 (02:44 -0800)
Another item from static analysis.  If an internal error ever caused
the "bad do_look buffer" warning from checkfile(), open file 'data'
would not be closed.  (The bug in checkfile()'s caller which prompted
that check was fixed long go.)

An alternate fix would be to move the input buffer check to before
the file is opened, but verifying the file first seems worthwhile.

src/pager.c

index 22df977e49a0c446cd529b9af851e189251ce5f1..6982860c988b2ef4fa6978442e5bf07643e6bd0b 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 pager.c $NHDT-Date: 1543185072 2018/11/25 22:31:12 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.139 $ */
+/* NetHack 3.6 pager.c $NHDT-Date: 1545129848 2018/12/18 10:44:08 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.142 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2018. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -527,14 +527,14 @@ char *supplemental_name;
 
     fp = dlb_fopen(DATAFILE, "r");
     if (!fp) {
-        pline("Cannot open data file!");
+        pline("Cannot open 'data' file!");
         return;
     }
     /* If someone passed us garbage, prevent fault. */
     if (!inp || strlen(inp) > (BUFSZ - 1)) {
         impossible("bad do_look buffer passed (%s)!",
                    !inp ? "null" : "too long");
-        return;
+        goto checkfile_done;
     }
 
     /* To prevent the need for entries in data.base like *ngel to account