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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user