paniclog fix
Writing lua warnings to paniclog (coming soon; tested without the garbage collection fix in order to have test data) could crash on the last pair. Those are written after the 'nomakedefs' structure had been freed so version_string was Null. The NAO PANICLOG_FMT2 code triggered a warning about the test for g.plname; it is array so will never be Null.
This commit is contained in:
+6
-5
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 files.c $NHDT-Date: 1646314650 2022/03/03 13:37:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.346 $ */
|
/* NetHack 3.7 files.c $NHDT-Date: 1654069053 2022/06/01 07:37:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.351 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Derek S. Ray, 2015. */
|
/*-Copyright (c) Derek S. Ray, 2015. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -3616,12 +3616,12 @@ check_recordfile(const char *dir UNUSED_if_not_OS2_CODEVIEW)
|
|||||||
|
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
void
|
void
|
||||||
paniclog(const char *type, /* panic, impossible, trickery */
|
paniclog(
|
||||||
const char *reason) /* explanation */
|
const char *type, /* panic, impossible, trickery, [lua] */
|
||||||
|
const char *reason) /* explanation */
|
||||||
{
|
{
|
||||||
#ifdef PANICLOG
|
#ifdef PANICLOG
|
||||||
FILE *lfile;
|
FILE *lfile;
|
||||||
char buf[BUFSZ];
|
|
||||||
|
|
||||||
if (!g.program_state.in_paniclog) {
|
if (!g.program_state.in_paniclog) {
|
||||||
g.program_state.in_paniclog = 1;
|
g.program_state.in_paniclog = 1;
|
||||||
@@ -3629,9 +3629,10 @@ paniclog(const char *type, /* panic, impossible, trickery */
|
|||||||
if (lfile) {
|
if (lfile) {
|
||||||
#ifdef PANICLOG_FMT2
|
#ifdef PANICLOG_FMT2
|
||||||
(void) fprintf(lfile, "%ld %s: %s %s\n",
|
(void) fprintf(lfile, "%ld %s: %s %s\n",
|
||||||
ubirthday, (g.plname ? g.plname : "(none)"),
|
ubirthday, (g.plname[0] ? g.plname : "(none)"),
|
||||||
type, reason);
|
type, reason);
|
||||||
#else
|
#else
|
||||||
|
char buf[BUFSZ];
|
||||||
time_t now = getnow();
|
time_t now = getnow();
|
||||||
int uid = getuid();
|
int uid = getuid();
|
||||||
char playmode = wizard ? 'D' : discover ? 'X' : '-';
|
char playmode = wizard ? 'D' : discover ? 'X' : '-';
|
||||||
|
|||||||
+8
-2
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 version.c $NHDT-Date: 1651297024 2022/04/30 05:37:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.88 $ */
|
/* NetHack 3.7 version.c $NHDT-Date: 1654069065 2022/06/01 07:37:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.91 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2018. */
|
/*-Copyright (c) Michael Allison, 2018. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -10,13 +10,19 @@
|
|||||||
#define OPTIONS_AT_RUNTIME
|
#define OPTIONS_AT_RUNTIME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern char *mdlib_version_string(char *, const char *);
|
||||||
static void insert_rtoption(char *);
|
static void insert_rtoption(char *);
|
||||||
|
|
||||||
/* fill buffer with short version (so caller can avoid including date.h) */
|
/* fill buffer with short version (so caller can avoid including date.h) */
|
||||||
char *
|
char *
|
||||||
version_string(char *buf, size_t bufsz)
|
version_string(char *buf, size_t bufsz)
|
||||||
{
|
{
|
||||||
Snprintf(buf, bufsz, "%s", nomakedefs.version_string);
|
Snprintf(buf, bufsz, "%s",
|
||||||
|
((nomakedefs.version_string && nomakedefs.version_string[0])
|
||||||
|
? nomakedefs.version_string
|
||||||
|
/* in case we try to write a paniclog entry after releasing
|
||||||
|
the 'nomakedefs' data */
|
||||||
|
: mdlib_version_string(buf, ".")));
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user