diff options
author | Po Lu <luangruo@yahoo.com> | 2022-02-13 18:19:51 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-02-13 18:20:42 +0800 |
commit | 6ed1994d277541035a507481aede6892bb55018c (patch) | |
tree | bbe969e0389a04d7637ff9b71ace4d54ad3c69f2 | |
parent | 242a2765d3970641887be7a6dedcc14b07fade7e (diff) | |
download | emacs-6ed1994d277541035a507481aede6892bb55018c.tar.gz emacs-6ed1994d277541035a507481aede6892bb55018c.tar.bz2 emacs-6ed1994d277541035a507481aede6892bb55018c.zip |
Prevent crashes from illegal locale coding systems
* src/xfns.c (xic_preedit_draw_callback):
* src/xterm.c (handle_one_xevent): Don't pass invalid coding
systems to `setup_coding_system'.
-rw-r--r-- | src/xfns.c | 8 | ||||
-rw-r--r-- | src/xterm.c | 10 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/xfns.c b/src/xfns.c index 02994e1b94f..c490dc1802a 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -3198,6 +3198,14 @@ xic_preedit_draw_callback (XIC xic, XPointer client_data, if (!output->preedit_active) return; + /* If we don't bail out here then GTK can crash + from the resulting signal in `setup_coding_system'. */ + if (NILP (Fcoding_system_p (Vlocale_coding_system))) + { + text = NULL; + goto im_abort; + } + if (call_data->text) text = x_xim_text_to_utf8_unix (call_data->text, &text_length); else diff --git a/src/xterm.c b/src/xterm.c index 50b7c9a6067..fe213b0fabb 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -10024,6 +10024,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (nchars < nbytes) { + /* If we don't bail out here then GTK can crash + from the resulting signal in `setup_coding_system'. */ + if (NILP (Fcoding_system_p (coding_system))) + goto done_keysym; + /* Decode the input data. */ /* The input should be decoded with `coding_system' @@ -11763,6 +11768,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (nchars < nbytes) { + /* If we don't bail out here then GTK can crash + from the resulting signal in `setup_coding_system'. */ + if (NILP (Fcoding_system_p (Vlocale_coding_system))) + goto xi_done_keysym; + /* Decode the input data. */ setup_coding_system (Vlocale_coding_system, &coding); |