fix github issue #734 - ^A crash
Issue #734 reported as "parse function" by Meklon2007: the change yesterday intended to make ^A work for commands that were preceded by a prefix was triggering a crash if used after a keystroke that's not assigned to any command. 'M^A' or '~^A' would segfault by derefencing a null pointer when checking whether 'M' or '~' was a prefix. This prevents the check attempt from doing that, but a better fix would be to not put the invalid command keystroke into the do-again buffer in the first place. Fixes #734
This commit is contained in:
@@ -1151,6 +1151,8 @@ arriving on Valkyrie quest final level could produce impossible warning
|
|||||||
"mkstairs: placing stairs up on molten lava at <68,13>"
|
"mkstairs: placing stairs up on molten lava at <68,13>"
|
||||||
if the repeat command was used after prefix+command, only the command part got
|
if the repeat command was used after prefix+command, only the command part got
|
||||||
repeated
|
repeated
|
||||||
|
the change for repeat after prefix+command would result in a crash if repeat
|
||||||
|
was attempted after an unassigned key
|
||||||
|
|
||||||
curses: 'msg_window' option wasn't functional for curses unless the binary
|
curses: 'msg_window' option wasn't functional for curses unless the binary
|
||||||
also included tty support
|
also included tty support
|
||||||
|
|||||||
@@ -5163,11 +5163,12 @@ parse(void)
|
|||||||
re-enter with g.in_doagain set true */
|
re-enter with g.in_doagain set true */
|
||||||
g.command_count = g.last_command_count;
|
g.command_count = g.last_command_count;
|
||||||
} else {
|
} else {
|
||||||
uchar c = (g.shead > 0) ? (uchar) g.saveq[g.shead - 1] & 0xff : 0;
|
uchar c = (g.shead > 0) ? (uchar) (g.saveq[g.shead - 1] & 0xff) : 0;
|
||||||
|
|
||||||
g.last_command_count = g.command_count;
|
g.last_command_count = g.command_count;
|
||||||
/* reset saveq unless it holds a prefix */
|
/* reset saveq unless it holds a prefix */
|
||||||
if (!c || (g.Cmd.commands[c]->flags & PREFIXCMD) == 0)
|
if (!c || !g.Cmd.commands[c]
|
||||||
|
|| (g.Cmd.commands[c]->flags & PREFIXCMD) == 0)
|
||||||
savech(0);
|
savech(0);
|
||||||
savech((char) foo);
|
savech((char) foo);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user