osc52: unset (clear) selection when an invalid payload is received

This commit is contained in:
Daniel Eklöf 2020-09-09 18:46:39 +02:00
parent dec6f963cb
commit 776b831d89
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 18 additions and 11 deletions

View file

@ -112,6 +112,8 @@
* Handling of multi-column composed characters while reflowing.
* Escape sequences sent for key combinations with `Return`, that did
**not** include `Alt`.
* Clipboard (or primary selection) is now cleared when receiving an
OSC-52 command with an invalid base64 encoded payload.
### Security

27
osc.c
View file

@ -23,17 +23,6 @@ static void
osc_to_clipboard(struct terminal *term, const char *target,
const char *base64_data)
{
char *decoded = base64_decode(base64_data);
if (decoded == NULL) {
if (errno == EINVAL)
LOG_WARN("OSC: invalid clipboard data: %s", base64_data);
else
LOG_ERRNO("base64_decode() failed");
return;
}
LOG_DBG("decoded: %s", decoded);
bool to_clipboard = false;
bool to_primary = false;
@ -71,6 +60,22 @@ osc_to_clipboard(struct terminal *term, const char *target,
return;
}
char *decoded = base64_decode(base64_data);
if (decoded == NULL) {
if (errno == EINVAL)
LOG_WARN("OSC: invalid clipboard data: %s", base64_data);
else
LOG_ERRNO("base64_decode() failed");
if (to_clipboard)
selection_clipboard_unset(seat);
if (to_primary)
selection_primary_unset(seat);
return;
}
LOG_DBG("decoded: %s", decoded);
if (to_clipboard) {
char *copy = xstrdup(decoded);
if (!text_to_clipboard(seat, term, copy, seat->kbd.serial))