degesch: better shift state encoding handling

I don't know, probably didn't matter.
This commit is contained in:
Přemysl Eric Janouch 2017-07-07 20:45:24 +02:00
parent f7dce5e861
commit 36be830bfc
Signed by: p
GPG Key ID: B715679E3A361BE6
1 changed files with 8 additions and 6 deletions

View File

@ -3599,9 +3599,16 @@ explode_formatter_attr (struct exploder *self, struct formatter_item *item)
static void static void
explode_text (struct exploder *self, const char *text) explode_text (struct exploder *self, const char *text)
{ {
// Throw away any potentially harmful control characters first
struct str filtered = str_make ();
for (const char *p = text; *p; p++)
if (!strchr ("\a\b\x1b", *p))
str_append_c (&filtered, *p);
size_t term_len = 0; size_t term_len = 0;
char *term = iconv_xstrdup (self->ctx->term_from_utf8, char *term = iconv_xstrdup (self->ctx->term_from_utf8,
(char *) text, -1, &term_len); filtered.str, filtered.len + 1, &term_len);
str_free (&filtered);
mbstate_t ps; mbstate_t ps;
memset (&ps, 0, sizeof ps); memset (&ps, 0, sizeof ps);
@ -3613,11 +3620,6 @@ explode_text (struct exploder *self, const char *text)
hard_assert (len != (size_t) -2 && len != (size_t) -1); hard_assert (len != (size_t) -2 && len != (size_t) -1);
processed += len; processed += len;
// Throw away any potentially harmful control characters
// XXX: this is likely to break shift state encodings
if (wcschr (L"\a\b\x1b", wch))
continue;
struct line_char *c = line_char_new (term + processed - len, len, wch); struct line_char *c = line_char_new (term + processed - len, len, wch);
c->attrs = self->attrs; c->attrs = self->attrs;
LIST_APPEND_WITH_TAIL (self->result, self->result_tail, c); LIST_APPEND_WITH_TAIL (self->result, self->result_tail, c);