diff --git a/CHANGELOG.md b/CHANGELOG.md index 48cea306..b3255565 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -102,10 +102,13 @@ set in `[environment]`. * Environment variables normally set by foot lost with `footclient -E,--client-environment` ([#1568][1568]). +* XDG toplevel protocol violation, by trying to set a title that + contains an invalid UTF-8 sequence ([#1552][1552]). [1531]: https://codeberg.org/dnkl/foot/issues/1531 [1573]: https://codeberg.org/dnkl/foot/issues/1573 [1568]: https://codeberg.org/dnkl/foot/issues/1568 +[1552]: https://codeberg.org/dnkl/foot/issues/1552 ### Security diff --git a/terminal.c b/terminal.c index ed13073e..f93e7abc 100644 --- a/terminal.c +++ b/terminal.c @@ -3249,6 +3249,13 @@ term_set_window_title(struct terminal *term, const char *title) if (term->window_title != NULL && streq(term->window_title, title)) return; + if (mbsntoc32(NULL, title, strlen(title), 0) == (char32_t)-1) { + /* It's an xdg_toplevel::set_title() protocol violation to set + a title with an invalid UTF-8 sequence */ + LOG_WARN("%s: title is not valid UTF-8, ignoring", title); + return; + } + free(term->window_title); term->window_title = xstrdup(title); render_refresh_title(term);