GUACAMOLE-564: Hide APC escape sequence.

An APC escape sequence contains an arbitrary string command between
(ESC _) and (ESC \) sequences. While we don't support any APC commands, we
should ignore any commands that we do encounter.
This commit is contained in:
Jim Chen 2018-01-09 22:36:46 -05:00
parent b61a6ab758
commit b96afce222
2 changed files with 31 additions and 0 deletions

View File

@ -186,5 +186,16 @@ int guac_terminal_osc(guac_terminal* term, unsigned char c);
*/
int guac_terminal_ctrl_func(guac_terminal* term, unsigned char c);
/**
* Handles terminal control function sequences initiated with "ESC _".
*
* @param term
* The terminal that received the given character of data.
*
* @param c
* The character that was received by the given terminal.
*/
int guac_terminal_apc(guac_terminal* term, unsigned char c);
#endif

View File

@ -367,6 +367,10 @@ int guac_terminal_escape(guac_terminal* term, unsigned char c) {
guac_terminal_reset(term);
break;
case '_':
term->char_handler = guac_terminal_apc;
break;
default:
guac_client_log(term->client, GUAC_LOG_DEBUG,
"Unhandled ESC sequence: %c", c);
@ -1373,3 +1377,19 @@ int guac_terminal_ctrl_func(guac_terminal* term, unsigned char c) {
}
int guac_terminal_apc(guac_terminal* term, unsigned char c) {
/* xterm does not implement APC functions and neither do we. Look for the
* "ESC \" (string terminator) sequence, while ignoring other chars. */
static bool escaping = false;
if (escaping) {
if (c == '\\')
term->char_handler = guac_terminal_echo;
escaping = false;
}
if (c == 0x1B)
escaping = true;
return 0;
}