osc: verify OSC 4/104 color index is valid

Closes #434
This commit is contained in:
Daniel Eklöf 2021-04-05 21:06:48 +02:00
parent 4ec2c59861
commit 4f0c0628a2
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 14 additions and 1 deletions

View file

@ -71,6 +71,9 @@
when output scaling was enabled
(https://codeberg.org/dnkl/foot/issues/409).
* Empty sixels resulted in non-empty images.
* OSC-4/104 out-of-bounds accesses to the color table. This was the
reason pywal turned foot windows transparent
(https://codeberg.org/dnkl/foot/issues/434).
## 1.7.0

12
osc.c
View file

@ -575,6 +575,11 @@ osc_dispatch(struct terminal *term)
idx += c - '0';
}
if (idx >= ALEN(term->colors.table)) {
LOG_WARN("invalid OSC 4 color index: %u", idx);
break;
}
/* Client queried for current value */
if (strlen(s_color) == 1 && s_color[0] == '?') {
uint32_t color = term->colors.table[idx];
@ -698,7 +703,7 @@ osc_dispatch(struct terminal *term)
if (strlen(string) == 0) {
LOG_DBG("resetting all colors");
for (size_t i = 0; i < 256; i++) {
for (size_t i = 0; i < ALEN(term->colors.table); i++) {
update_color_in_grids(
term, term->colors.table[i], term->colors.default_table[i]);
term->colors.table[i] = term->colors.default_table[i];
@ -717,6 +722,11 @@ osc_dispatch(struct terminal *term)
idx += c - '0';
}
if (idx >= ALEN(term->colors.table)) {
LOG_WARN("invalid OSC 104 color index: %u", idx);
continue;
}
LOG_DBG("resetting color #%u", idx);
update_color_in_grids(
term, term->colors.table[idx], term->colors.default_table[idx]);