Fix out-of-bounds write with Wayland compose-key event handling
`xkb_compose_state_get_utf8` may return multiple characters, while this isn't supported, prevent a buffer overflow & report a warning. Co-authored-by: Phoenix Katsch <phoenixkatsch@gmail.com> Ref: !114612 Pull Request: https://projects.blender.org/blender/blender/pulls/140272
This commit is contained in:
@@ -5150,7 +5150,20 @@ static bool xkb_compose_state_feed_and_get_utf8(
|
||||
const int utf8_buf_compose_len = xkb_compose_state_get_utf8(
|
||||
compose_state, utf8_buf_compose, sizeof(utf8_buf_compose));
|
||||
if (utf8_buf_compose_len > 0) {
|
||||
memcpy(r_utf8_buf, utf8_buf_compose, utf8_buf_compose_len);
|
||||
if (utf8_buf_compose_len > sizeof(GHOST_TEventKeyData::utf8_buf)) {
|
||||
/* TODO(@ideasman42): keyboard events in GHOST only support a single character.
|
||||
*
|
||||
* - In the case XKB compose enters multiple code-points only the first will be used.
|
||||
*
|
||||
* - Besides supporting multiple characters per key input,
|
||||
* one possible solution would be to generate an IME event.
|
||||
*
|
||||
* - In practice I'm not sure how common these are.
|
||||
* So far no bugs have been reported about this.
|
||||
*/
|
||||
CLOG_WARN(LOG, "key (compose_size=%d) exceeds the maximum size", utf8_buf_compose_len);
|
||||
}
|
||||
memcpy(r_utf8_buf, utf8_buf_compose, sizeof(GHOST_TEventKeyData::utf8_buf));
|
||||
handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user