GtkTextView crashes on repeated mouse press when input preedit is active
Steps to reproduce
- Open Text View -> Hypertext in gtk3-demo
- Type some text using ibus. Choose a language which uses preedit. (I have reproduced it with ibus-hangul and ibus-anthy.)
- While the preedit is active, repeat to press different positions in the Text View
Version information
Gtk 3.22.30 in Debian unstable.
Warnings
Starting program: /usr/bin/gtk3-demo
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffee0c0700 (LWP 25893)]
[New Thread 0x7fffed8bf700 (LWP 25894)]
[New Thread 0x7fffdffff700 (LWP 25895)]
[New Thread 0x7fffd7fff700 (LWP 25896)]
[New Thread 0x7fffdf7fe700 (LWP 25897)]
[Thread 0x7fffdf7fe700 (LWP 25897) exited]
[Thread 0x7fffdffff700 (LWP 25895) exited]
[Thread 0x7fffd7fff700 (LWP 25896) exited]
(gtk3-demo:25891): Gtk-CRITICAL **: 23:33:37.090: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
(gtk3-demo:25891): Gtk-CRITICAL **: 23:33:37.091: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
(gtk3-demo:25891): Gtk-CRITICAL **: 23:33:37.092: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
[New Thread 0x7fffd7fff700 (LWP 26543)]
[New Thread 0x7fffdffff700 (LWP 26544)]
[Thread 0x7fffd7fff700 (LWP 26543) exited]
(gtk3-demo:25891): Gdk-WARNING **: 23:33:41.184: Event with type 8 not holding a GdkDevice. It is most likely synthesized outside Gdk/GTK+
(gtk3-demo:25891): Gdk-WARNING **: 23:33:41.184: Event with type 8 not holding a GdkDevice. It is most likely synthesized outside Gdk/GTK+
(gtk3-demo:25891): Gdk-WARNING **: 23:33:41.184: Event with type 8 not holding a GdkDevice. It is most likely synthesized outside Gdk/GTK+
(gtk3-demo:25891): Gdk-WARNING **: 23:33:41.188: Event with type 8 not holding a GdkDevice. It is most likely synthesized outside Gdk/GTK+
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:45.793: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:45.794: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:46.929: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:46.930: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:47.121: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:47.161: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:47.162: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:47.297: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:47.313: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:47.314: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:50.169: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:50.170: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.505: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.506: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.559: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.560: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.593: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.595: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
[Thread 0x7fffdffff700 (LWP 26544) exited]
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.769: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.770: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.910: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.961: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.963: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.963: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.969: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:52.969: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:53.610: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:53.611: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:55.569: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:55.570: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:55.649: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:58.969: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:58.970: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:59.033: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:59.034: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
(gtk3-demo:25891): Pango-CRITICAL **: 23:33:59.506: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
**
Gtk:ERROR:../../../../gtk/gtktextsegment.c:195:_gtk_char_segment_new: assertion failed: (gtk_text_byte_begins_utf8_char (text))
Thread 1 "gtk3-demo" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: 그런 파일이나 디렉터리가 없습니다.
Backtrace
(gdb)
(gdb) bt
#0 0x00007ffff24f5e7b in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff24f7231 in __GI_abort () at abort.c:79
#2 0x00007ffff321afa5 in g_assertion_message () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007ffff321b00a in g_assertion_message_expr () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007ffff77e03ee in _gtk_char_segment_new (text=0x555555ca008f "\202\230", len=2) at ../../../../gtk/gtktextsegment.c:195
#5 0x00007ffff77e04d4 in char_segment_split_func (seg=0x555555ca0070, index=7) at ../../../../gtk/gtktextsegment.c:283
#6 0x00007ffff77e0355 in gtk_text_line_segment_split (iter=iter@entry=0x7fffffffc810) at ../../../../gtk/gtktextsegment.c:127
#7 0x00007ffff77c0d03 in gtk_text_btree_link_segment (iter=0x7fffffffc810, seg=0x555555c42780) at ../../../../gtk/gtktextbtree.c:6545
#8 0x00007ffff77c0d03 in real_set_mark (tree=tree@entry=0x555555f6ac00, existing_mark=<optimized out>, name=name@entry=0x7ffff789903f "insert", left_gravity=left_gravity@entry=0, where=where@entry=0x7fffffffc9f0, should_exist=should_exist@entry=1, redraw_selections=0)
at ../../../../gtk/gtktextbtree.c:2817
#9 0x00007ffff77c12f3 in _gtk_text_btree_select_range (tree=0x555555f6ac00, ins=ins@entry=0x7fffffffc9f0, bound=bound@entry=0x7fffffffca40) at ../../../../gtk/gtktextbtree.c:2920
#10 0x00007ffff77c44a5 in gtk_text_buffer_select_range (buffer=buffer@entry=0x555555c4cd00, ins=ins@entry=0x7fffffffcb40, bound=bound@entry=0x7fffffffcb90) at ../../../../gtk/gtktextbuffer.c:2463
#11 0x00007ffff77ebcc4 in gtk_text_view_start_selection_drag (text_view=text_view@entry=0x555555aa52f0, iter=iter@entry=0x7fffffffce40, granularity=granularity@entry=SELECT_CHARACTERS, extend=extend@entry=0) at ../../../../gtk/gtktextview.c:7899
#12 0x00007ffff77f1115 in gtk_text_view_multipress_gesture_pressed (gesture=0x555555bcde70, n_press=1, x=<optimized out>, y=<optimized out>, text_view=0x555555aa52f0) at ../../../../gtk/gtktextview.c:5747
#13 0x00007ffff0d3bfce in ffi_call_unix64 () at /usr/lib/x86_64-linux-gnu/libffi.so.6
#14 0x00007ffff0d3b93f in ffi_call () at /usr/lib/x86_64-linux-gnu/libffi.so.6
#15 0x00007ffff34ceb4d in g_cclosure_marshal_generic_va () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x00007ffff34ce1a6 in () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#17 0x00007ffff34e96df in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff34e9e0f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff76ba49c in gtk_gesture_multi_press_begin (gesture=0x555555bcde70, sequence=<optimized out>)
at ../../../../gtk/gtkgesturemultipress.c:241
#20 0x00007ffff34d0e68 in g_cclosure_marshal_VOID__BOXEDv () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff34ce1a6 in () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#22 0x00007ffff34e96df in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#23 0x00007ffff34e9e0f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#24 0x00007ffff76b742e in _gtk_gesture_set_recognized (sequence=0x0, recognized=1, gesture=0x555555bcde70)
at ../../../../gtk/gtkgesture.c:343
#25 0x00007ffff76b742e in _gtk_gesture_check_recognized (gesture=gesture@entry=0x555555bcde70, sequence=sequence@entry=0x0)
at ../../../../gtk/gtkgesture.c:389
#26 0x00007ffff76b897b in gtk_gesture_handle_event (controller=0x555555bcde70, event=0x7fffd8002e60)
at ../../../../gtk/gtkgesture.c:747
#27 0x00007ffff76bb63e in gtk_gesture_single_handle_event (controller=0x555555bcde70, event=0x7fffd8002e60)
at ../../../../gtk/gtkgesturesingle.c:222
#28 0x00007ffff7688e81 in gtk_event_controller_handle_event (controller=0x555555bcde70, event=event@entry=0x7fffd8002e60)
at ../../../../gtk/gtkeventcontroller.c:230
---Type <return> to continue, or q <return> to quit---
#29 0x00007ffff7847c2b in _gtk_widget_run_controllers (widget=0x555555aa52f0, event=0x7fffd8002e60, phase=GTK_PHASE_BUBBLE)
at ../../../../gtk/gtkwidget.c:7379
#30 0x00007ffff7702d57 in _gtk_marshal_BOOLEAN__BOXEDv (closure=0x5555559989a0, return_value=0x7fffffffdbe0, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x5555559989d0)
at ../../../../gtk/gtkmarshalers.c:129
#31 0x00007ffff34ce1a6 in () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#32 0x00007ffff34e90ad in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#33 0x00007ffff34e9e0f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#34 0x00007ffff7849ed4 in gtk_widget_event_internal (widget=widget@entry=0x555555aa52f0, event=event@entry=0x7fffd8002e60)
at ../../../../gtk/gtkwidget.c:7744
#35 0x00007ffff784bf4a in gtk_widget_event (widget=widget@entry=0x555555aa52f0, event=event@entry=0x7fffd8002e60)
at ../../../../gtk/gtkwidget.c:7314
#36 0x00007ffff76ffcce in propagate_event_up (topmost=<optimized out>, event=<optimized out>, widget=0x555555aa52f0)
at ../../../../gtk/gtkmain.c:2592
#37 0x00007ffff76ffcce in propagate_event (widget=<optimized out>, event=0x7fffd8002e60, captured=<optimized out>, topmost=0x0)
at ../../../../gtk/gtkmain.c:2694
#38 0x00007ffff7701da8 in gtk_main_do_event (event=<optimized out>) at ../../../../gtk/gtkmain.c:1915
#39 0x00007ffff7213785 in _gdk_event_emit (event=event@entry=0x7fffd8002e60) at ../../../../gdk/gdkevents.c:73
#40 0x00007ffff7243fa2 in gdk_event_source_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>)
at ../../../../../gdk/x11/gdkeventsource.c:367
#41 0x00007ffff31f4287 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#42 0x00007ffff31f44c0 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#43 0x00007ffff31f454c in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#44 0x00007ffff644ecdd in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#45 0x00005555555731ee in main ()