degesch: better shift state encoding handling
I don't know, probably didn't matter.
This commit is contained in:
parent
f7dce5e861
commit
36be830bfc
14
degesch.c
14
degesch.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue