Parse and ignore SOS codes

Fixes #7184
This commit is contained in:
Kovid Goyal 2024-03-03 08:58:47 +05:30
parent 89108e856f
commit 8fa592d849
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
3 changed files with 21 additions and 1 deletions

View file

@ -70,6 +70,7 @@
#define ESC_ST '\\'
#define ESC_PM '^'
#define ESC_APC '_'
#define ESC_SOS 'X'
// *Reset*.
#define ESC_RIS 'c'

View file

@ -158,7 +158,7 @@ static const int64_t digit_multipliers[] = {
// Data structures {{{
typedef enum VTEState {
VTE_NORMAL, VTE_ESC = ESC, VTE_CSI = ESC_CSI, VTE_OSC = ESC_OSC, VTE_DCS = ESC_DCS, VTE_APC = ESC_APC, VTE_PM = ESC_PM
VTE_NORMAL, VTE_ESC = ESC, VTE_CSI = ESC_CSI, VTE_OSC = ESC_OSC, VTE_DCS = ESC_DCS, VTE_APC = ESC_APC, VTE_PM = ESC_PM, VTE_SOS = ESC_SOS
} VTEState;
static inline const char*
@ -171,6 +171,7 @@ vte_state_name(VTEState s) {
case VTE_DCS: return "VTE_DCS";
case VTE_APC: return "VTE_APC";
case VTE_PM: return "VTE_PM";
case VTE_SOS: return "VTE_SOS";
}
static char buf[16];
snprintf(buf, sizeof(buf), "VTE_0x%x", s);
@ -269,6 +270,7 @@ consume_esc(PS *self) {
case ESC_OSC: SET_STATE(OSC); break;
case ESC_CSI: SET_STATE(CSI); reset_csi(&self->csi); break;
case ESC_APC: SET_STATE(APC); break;
case ESC_SOS: SET_STATE(SOS); break;
case ESC_PM: SET_STATE(PM); break;
IS_ESCAPED_CHAR:
return false;
@ -1344,6 +1346,20 @@ dispatch_pm(PS *self UNUSED, uint8_t *buf, size_t bufsz, bool is_extended UNUSED
}
// }}}
// SOS mode {{{
static void
dispatch_sos(PS *self UNUSED, uint8_t *buf, size_t bufsz, bool is_extended UNUSED) {
if (bufsz < 2) return;
switch(buf[0]) {
default:
REPORT_ERROR("Unrecognized SOS code: 0x%x", buf[0]);
break;
}
}
// }}}
// Parse loop {{{
@ -1373,6 +1389,8 @@ consume_input(PS *self, PyObject *dump_callback UNUSED, id_type window_id UNUSED
consume(pm);
case VTE_DCS:
consume(dcs);
case VTE_SOS:
consume(sos);
}
#ifdef DUMP_COMMANDS

View file

@ -630,6 +630,7 @@ class TestParser(BaseTest):
pb = partial(self.parse_bytes_dump, s)
pb('a\033_+\\+\033\\bcde', ('draw', 'a'), ('Unrecognized APC code: 0x2b',), ('draw', 'bcde'))
pb('a\033^+\\+\033\\bcde', ('draw', 'a'), ('Unrecognized PM code: 0x2b',), ('draw', 'bcde'))
pb('a\033X+\\+\033\\bcde', ('draw', 'a'), ('Unrecognized SOS code: 0x2b',), ('draw', 'bcde'))
def test_graphics_command(self):
from base64 import standard_b64encode