From cc2105b7b4af488033adb49bfb0a108535a2d3b8 Mon Sep 17 00:00:00 2001 From: cohrs Date: Tue, 14 Oct 2003 07:35:01 +0000 Subject: [PATCH] debian #184911 - quitting while tty mode inventory is displayed The tty menu code wasn't totally reentrant, causing it to free memory that wasn't on the heap if you had your inventory displayed, ^C then ask to see the inventory again. Solved this by converting the buffer used by process_menu_window to be heap-allocated. If the Quit code could return at this point, this would still be very bad, but since it doesn't, this is OK. --- doc/fixes34.3 | 1 + win/tty/wintty.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/fixes34.3 b/doc/fixes34.3 index cf16a121b..e0f32a445 100644 --- a/doc/fixes34.3 +++ b/doc/fixes34.3 @@ -63,6 +63,7 @@ X11: avoid a possible crash when using window manger to close a player selection window Gnome: add Quiver menu item, fix outdated Quit menu item Gnome: key values on unsigned char platform could fail to compare correctly +tty: avoid crash displaying quit inventory if inventory was already displayed General New Features diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 87a1a1c66..e51dcb893 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -1140,12 +1140,12 @@ struct WinDesc *cw; int n, curr_page, page_lines; boolean finished, counting, reset_count; char *cp, *rp, resp[QBUFSZ], gacc[QBUFSZ], - *msave, morestr[QBUFSZ]; + *msave, *morestr; curr_page = page_lines = 0; page_start = page_end = 0; msave = cw->morestr; /* save the morestr */ - cw->morestr = morestr; + cw->morestr = morestr = (char*) alloc((unsigned) QBUFSZ); counting = FALSE; count = 0L; reset_count = TRUE; @@ -1429,6 +1429,7 @@ struct WinDesc *cw; } /* while */ cw->morestr = msave; + free((genericptr_t)morestr); } STATIC_OVL void -- 2.40.0