Fix client code for catching rogue redirections and executes
The client permits redirection and execute only if it recently saw
them in player input. The caching of recent player input for this
purpose was broken.
When save_input() evicted a line, it kept its newline. This could
make the recent_input ring buffer fill up, which then got redirections
and execute misdiagnosed as rogue.
save_input() also screwed up when evicting one line didn't make
sufficient room for the line to be saved. This could cause assertion
failure in forget_input().
Broken in commit
8b7d0b91, v4.3.11.