gtk issueshttps://gitlab.gnome.org/GNOME/gtk/-/issues2024-02-27T17:07:50Zhttps://gitlab.gnome.org/GNOME/gtk/-/issues/6484Use-After-Free When Canceling Print Dialog2024-02-27T17:07:50ZKhalid Abu ShawaribUse-After-Free When Canceling Print Dialog## Steps to reproduce
1. Compile and run git flatpak GTK4 widget factory with address sanitizer enabled.
2. Click Print under the spin widget in page 3 in Pages tab
![image](/uploads/02a9065a4319a1139c14745a5e2dbe84/image.png)
3. Canc...## Steps to reproduce
1. Compile and run git flatpak GTK4 widget factory with address sanitizer enabled.
2. Click Print under the spin widget in page 3 in Pages tab
![image](/uploads/02a9065a4319a1139c14745a5e2dbe84/image.png)
3. Cancel printing
## Current behavior
Address Sanitizer terminates the app because a use-after-free was detected. It runs normally without sanitizer.
## Expected outcome
Runs normally regardless of sanitizer.
## Version information
GTK version: 4.13.9-942fa7fc54
Flatpak runtime, an Ubuntu 23.10 host with X11.
GSK Renderer: GL (new), GLES 3.2, EGL 1.5, NVIDIA 545.29.06
meson options: `-Db_sanitize=address`
## Additional information
<details><summary>Sanitizer output:</summary>
```
Printing was canceled
=================================================================
==967==ERROR: AddressSanitizer: heap-use-after-free on address 0x60b0002eb628 at pc 0x7f96969ae46a bp 0x7ffe89dda9d0 sp 0x7ffe89dda9c0
READ of size 8 at 0x60b0002eb628 thread T0
#0 0x7f96969ae469 in prepare_print_response ../../../../../../../../../Projects/gnome/applications/gtk/gtk/print/gtkprintoperation-portal.c:481
#1 0x7f9695dda78f in emit_signal_instance_in_idle_cb (/usr/lib/x86_64-linux-gnu/libgio-2.0.so.0+0x12078f) (BuildId: 802b8fe46796912d6e8a4f57953f1d1112dc4d9b)
#2 0x7f9695f10666 in g_main_dispatch (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x60666) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#3 0x7f9695f12786 in g_main_context_iterate_unlocked.isra.0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62786) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#4 0x7f9695f12e42 in g_main_context_iteration (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62e42) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#5 0x7f9695db1fcc in g_application_run (/usr/lib/x86_64-linux-gnu/libgio-2.0.so.0+0xf7fcc) (BuildId: 802b8fe46796912d6e8a4f57953f1d1112dc4d9b)
#6 0x55c44d8d05d4 in main ../../../../../../../../../Projects/gnome/applications/gtk/demos/widget-factory/widget-factory.c:2641
#7 0x7f9695a8a089 in __libc_start_call_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x28089) (BuildId: aaf4e4a17ee738539558816006c01c47869048b8)
#8 0x7f9695a8a14a in __libc_start_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x2814a) (BuildId: aaf4e4a17ee738539558816006c01c47869048b8)
#9 0x55c44d8d0634 in _start ../sysdeps/x86_64/start.S:115
0x60b0002eb628 is located 56 bytes inside of 112-byte region [0x60b0002eb5f0,0x60b0002eb660)
freed by thread T0 here:
#0 0x7f96978e18b0 in __interceptor_free.part.0 (/usr/lib/x86_64-linux-gnu/libasan.so.8+0xe18b0) (BuildId: f3245133c640da83d6f2d5f510e15d27b4f0f783)
#1 0x7f96969ad90f in prepare_print_response ../../../../../../../../../Projects/gnome/applications/gtk/gtk/print/gtkprintoperation-portal.c:475
#2 0x7f9695dda78f in emit_signal_instance_in_idle_cb (/usr/lib/x86_64-linux-gnu/libgio-2.0.so.0+0x12078f) (BuildId: 802b8fe46796912d6e8a4f57953f1d1112dc4d9b)
#3 0x7f9695f10666 in g_main_dispatch (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x60666) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#4 0x7f9695f12786 in g_main_context_iterate_unlocked.isra.0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62786) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#5 0x7f9695f12e42 in g_main_context_iteration (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62e42) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#6 0x7f9695db1fcc in g_application_run (/usr/lib/x86_64-linux-gnu/libgio-2.0.so.0+0xf7fcc) (BuildId: 802b8fe46796912d6e8a4f57953f1d1112dc4d9b)
#7 0x55c44d8d05d4 in main ../../../../../../../../../Projects/gnome/applications/gtk/demos/widget-factory/widget-factory.c:2641
#8 0x7f9695a8a089 in __libc_start_call_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x28089) (BuildId: aaf4e4a17ee738539558816006c01c47869048b8)
#9 0x7f9695a8a14a in __libc_start_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x2814a) (BuildId: aaf4e4a17ee738539558816006c01c47869048b8)
#10 0x55c44d8d0634 in _start ../sysdeps/x86_64/start.S:115
previously allocated by thread T0 here:
#0 0x7f96978e2757 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.8+0xe2757) (BuildId: f3245133c640da83d6f2d5f510e15d27b4f0f783)
#1 0x7f9695f19a31 in g_malloc0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x69a31) (BuildId: d3d84af6da99bd363b9397c28c8205dced2b8596)
#2 0x7f96969ac9f1 in create_portal_data ../../../../../../../../../Projects/gnome/applications/gtk/gtk/print/gtkprintoperation-portal.c:560
#3 0x7f96969afab6 in gtk_print_operation_portal_run_dialog_async ../../../../../../../../../Projects/gnome/applications/gtk/gtk/print/gtkprintoperation-portal.c:707
#4 0x7f9696849658 in gtk_print_operation_run ../../../../../../../../../Projects/gnome/applications/gtk/gtk/print/gtkprintoperation.c:3115
#5 0x55c44d8d42f5 in activate_print ../../../../../../../../../Projects/gnome/applications/gtk/demos/widget-factory/widget-factory.c:500
#6 0x7f96977b26f9 in g_closure_invoke (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x186f9) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#7 0x7f96977c83db in signal_emit_unlocked_R.isra.0 (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x2e3db) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#8 0x7f96977c9e60 in signal_emit_valist_unlocked (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x2fe60) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#9 0x7f96977cfe30 in g_signal_emit_valist (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35e30) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#10 0x7f96977cfef2 in g_signal_emit (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35ef2) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#11 0x7f9695dbb584 in g_simple_action_activate (/usr/lib/x86_64-linux-gnu/libgio-2.0.so.0+0x101584) (BuildId: 802b8fe46796912d6e8a4f57953f1d1112dc4d9b)
#12 0x7f969685fa4c in gtk_action_muxer_activate_action ../../../../../../../../../Projects/gnome/applications/gtk/gtk/gtkactionmuxer.c:878
#13 0x7f969685fae1 in gtk_action_muxer_activate_action ../../../../../../../../../Projects/gnome/applications/gtk/gtk/gtkactionmuxer.c:880
#14 0x7f96977b2911 in _g_closure_invoke_va (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x18911) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#15 0x7f96977c9f1e in signal_emit_valist_unlocked (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x2ff1e) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#16 0x7f96977cfe30 in g_signal_emit_valist (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35e30) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#17 0x7f96977cfef2 in g_signal_emit (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35ef2) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#18 0x7f96963eee58 in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv gtk/gtkmarshalers.c:3688
#19 0x7f96977b2911 in _g_closure_invoke_va (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x18911) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#20 0x7f96977c9f1e in signal_emit_valist_unlocked (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x2ff1e) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#21 0x7f96977cfe30 in g_signal_emit_valist (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35e30) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#22 0x7f96977cfef2 in g_signal_emit (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35ef2) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#23 0x7f9696576956 in gtk_gesture_click_end ../../../../../../../../../Projects/gnome/applications/gtk/gtk/gtkgestureclick.c:275
#24 0x7f96977b5d59 in g_cclosure_marshal_VOID__BOXEDv (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x1bd59) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#25 0x7f96977b2911 in _g_closure_invoke_va (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x18911) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#26 0x7f96977c9f1e in signal_emit_valist_unlocked (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x2ff1e) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#27 0x7f96977cfe30 in g_signal_emit_valist (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35e30) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#28 0x7f96977cfef2 in g_signal_emit (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0+0x35ef2) (BuildId: 58d19083ad73f2c7aa9cd57c77517556285792b2)
#29 0x7f96965703ac in _gtk_gesture_set_recognized ../../../../../../../../../Projects/gnome/applications/gtk/gtk/gtkgesture.c:340
#30 0x7f96965703ac in _gtk_gesture_check_recognized ../../../../../../../../../Projects/gnome/applications/gtk/gtk/gtkgesture.c:381
SUMMARY: AddressSanitizer: heap-use-after-free ../../../../../../../../../Projects/gnome/applications/gtk/gtk/print/gtkprintoperation-portal.c:481 in prepare_print_response
Shadow bytes around the buggy address:
0x60b0002eb380: fd fd fd fa fa fa fa fa fa fa fa fa fd fd fd fd
0x60b0002eb400: fd fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa
0x60b0002eb480: fa fa fd fd fd fd fd fd fd fd fd fd fd fd fd fa
0x60b0002eb500: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
0x60b0002eb580: fd fd fd fd fd fd fa fa fa fa fa fa fa fa fd fd
=>0x60b0002eb600: fd fd fd fd fd[fd]fd fd fd fd fd fd fa fa fa fa
0x60b0002eb680: fa fa fa fa fd fd fd fd fd fd fd fd fd fd fd fd
0x60b0002eb700: fd fa fa fa fa fa fa fa fa fa fd fd fd fd fd fd
0x60b0002eb780: fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa
0x60b0002eb800: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa
0x60b0002eb880: fa fa fa fa fa fa fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==967==ABORTING
```
</details>
Code: https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gtk/print/gtkprintoperation-portal.c#L475-481https://gitlab.gnome.org/GNOME/gtk/-/issues/6010gtk4-demo > Lists > Selections emits CRITICALS2024-02-11T02:59:29ZDaniel Bolesgtk4-demo > Lists > Selections emits CRITICALSRunning this demo emits a bunch of the following, as does opening/hovering the 2nd DropDown.
> `(gtk4-demo:164855): GLib-GObject-CRITICAL **: 15:12:33.270: invalid cast from 'GtkStringObject' to 'StringHolder'`
The local `StringHolder`...Running this demo emits a bunch of the following, as does opening/hovering the 2nd DropDown.
> `(gtk4-demo:164855): GLib-GObject-CRITICAL **: 15:12:33.270: invalid cast from 'GtkStringObject' to 'StringHolder'`
The local `StringHolder` derives only from GObject, but the `GtkStringList` expects its type to be `GtkStringObject` instances. But they can't be, to add custom data, because `GtkStringObject` is final.
<details><summary>Backtrace</summary>
<pre>
(gtk4-demo:163415): GLib-GObject-CRITICAL **: 15:08:33.037: invalid cast from 'GtkStringObject' to 'StringHolder'
Thread 1 "gtk4-demo" received signal SIGTRAP, Trace/breakpoint trap.
_g_log_abort (breakpoint=1) at ../../../../jhbuild/checkout/gnome/glib/glib/gmessages.c:558
558 ../../../../jhbuild/checkout/gnome/glib/glib/gmessages.c: No such file or directory.
(ins)(gdb) bt
#0 _g_log_abort (breakpoint=1) at ../../../../jhbuild/checkout/gnome/glib/glib/gmessages.c:558
#1 0x00007ffff7300042 in g_logv (log_domain=0x7ffff7fae838 "GLib-GObject", log_level=G_LOG_LEVEL_CRITICAL,
format=0x7ffff7fb0110 "invalid cast from '%s' to '%s'", args=0x7fffffffa4f8)
at ../../../../jhbuild/checkout/gnome/glib/glib/gmessages.c:1418
#2 0x00007ffff7300139 in g_log (log_domain=0x7ffff7fae838 "GLib-GObject", log_level=G_LOG_LEVEL_CRITICAL,
format=0x7ffff7fb0110 "invalid cast from '%s' to '%s'") at ../../../../jhbuild/checkout/gnome/glib/glib/gmessages.c:1460
#3 0x00007ffff7f9906e in g_type_check_instance_cast (type_instance=0x55555964bea0, iface_type=93825060609440)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gtype.c:4224
#4 0x00005555555ad1d3 in STRING_HOLDER (ptr=0x55555964bea0)
at ../../../../jhbuild/checkout/gnome/gtk/demos/gtk-demo/listview_selections.c:16
#5 0x00005555555adf73 in get_title (item=0x55555964bea0)
at ../../../../jhbuild/checkout/gnome/gtk/demos/gtk-demo/listview_selections.c:272
#6 0x00007ffff57def7a in ?? () from /lib/x86_64-linux-gnu/libffi.so.8
#7 0x00007ffff57de40e in ?? () from /lib/x86_64-linux-gnu/libffi.so.8
#8 0x00007ffff57deb0d in ffi_call () from /lib/x86_64-linux-gnu/libffi.so.8
#9 0x00007ffff7f6e7bd in g_cclosure_marshal_generic (closure=0x555558832ed0, return_gvalue=0x7fffffffaac0, n_param_values=1,
param_values=0x7fffffffa9e0, invocation_hint=0x0, marshal_data=0x0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:1536
#10 0x00007ffff7f6ccef in g_closure_invoke (closure=0x555558832ed0, return_value=0x7fffffffaac0, n_param_values=1,
param_values=0x7fffffffa9e0, invocation_hint=0x0) at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:832
#11 0x00007ffff7584b4b in gtk_closure_expression_evaluate (expr=0x5555590f4700, this=0x55555964bea0, value=0x7fffffffaac0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkexpression.c:1483
#12 0x00007ffff7585529 in gtk_expression_evaluate (self=0x5555590f4700, this_=0x55555964bea0, value=0x7fffffffaac0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkexpression.c:1815
#13 0x00007ffff7568281 in bind_item (factory=0x5555590f5080, list_item=0x55555883bb80, data=0x555558727fb0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkdropdown.c:773
#14 0x00007ffff7f72783 in g_cclosure_marshal_VOID__OBJECTv (closure=0x5555590f51c0, return_value=0x0, instance=0x5555590f5080,
args=0x7fffffffaf98, marshal_data=0x0, n_params=1, param_types=0x55555612df60)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gmarshal.c:1910
#15 0x00007ffff7f6cfe3 in _g_closure_invoke_va (closure=0x5555590f51c0, return_value=0x0, instance=0x5555590f5080,
args=0x7fffffffaf98, n_params=1, param_types=0x55555612df60) at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:895
#16 0x00007ffff7f8b791 in signal_emit_valist_unlocked (instance=0x5555590f5080, signal_id=261, detail=0, var_args=0x7fffffffaf98)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3516
#17 0x00007ffff7f8b16f in g_signal_emit_valist (instance=0x5555590f5080, signal_id=261, detail=0, var_args=0x7fffffffaf98)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3355
#18 0x00007ffff7f8c9fa in g_signal_emit (instance=0x5555590f5080, signal_id=261, detail=0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3675
#19 0x00007ffff76b4b1b in gtk_signal_list_item_factory_setup (factory=0x5555590f5080, item=0x55555883bb80, bind=1,
func=0x7ffff76111e4 <gtk_list_factory_widget_setup_func>, data=0x5555594ec220)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtksignallistitemfactory.c:116
#20 0x00007ffff7615e6b in gtk_list_item_factory_setup (self=0x5555590f5080, item=0x55555883bb80, bind=1,
func=0x7ffff76111e4 <gtk_list_factory_widget_setup_func>, data=0x5555594ec220)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistitemfactory.c:137
#21 0x00007ffff7611295 in gtk_list_factory_widget_setup_factory (self=0x5555594ec220)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistfactorywidget.c:108
#22 0x00007ffff761240e in gtk_list_factory_widget_set_factory (self=0x5555594ec220, factory=0x5555590f5080)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistfactorywidget.c:545
#23 0x00007ffff761bfd6 in gtk_list_view_update_factories_with (self=0x555558caf4a0, factory=0x5555590f5080,
header_factory=0x555558f257e0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistview.c:229
#24 0x00007ffff761c108 in gtk_list_view_update_factories (self=0x555558caf4a0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistview.c:251
#25 0x00007ffff761cfe5 in gtk_list_view_root (widget=0x555558caf4a0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistview.c:687
#26 0x00007ffff77499c5 in gtk_widget_root (widget=0x555558caf4a0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:2480
#27 0x00007ffff775e523 in gtk_widget_forall (widget=0x55555925c140, callback=0x7ffff774980e <gtk_widget_root>, user_data=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:12273
#28 0x00007ffff77465e0 in gtk_widget_real_root (widget=0x55555925c140) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:778
#29 0x00007ffff77499c5 in gtk_widget_root (widget=0x55555925c140) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:2480
#30 0x00007ffff775e523 in gtk_widget_forall (widget=0x5555585d0d80, callback=0x7ffff774980e <gtk_widget_root>, user_data=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:12273
(ins)--Type <RET> for more, q to quit, c to continue without paging--
#31 0x00007ffff77465e0 in gtk_widget_real_root (widget=0x5555585d0d80) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:778
#32 0x00007ffff77499c5 in gtk_widget_root (widget=0x5555585d0d80) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:2480
#33 0x00007ffff775e523 in gtk_widget_forall (widget=0x55555944eac0, callback=0x7ffff774980e <gtk_widget_root>, user_data=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:12273
#34 0x00007ffff77465e0 in gtk_widget_real_root (widget=0x55555944eac0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:778
#35 0x00007ffff77499c5 in gtk_widget_root (widget=0x55555944eac0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:2480
#36 0x00007ffff775e523 in gtk_widget_forall (widget=0x55555944dce0, callback=0x7ffff774980e <gtk_widget_root>, user_data=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:12273
#37 0x00007ffff77465e0 in gtk_widget_real_root (widget=0x55555944dce0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:778
#38 0x00007ffff77499c5 in gtk_widget_root (widget=0x55555944dce0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:2480
#39 0x00007ffff775e523 in gtk_widget_forall (widget=0x555558727fb0, callback=0x7ffff774980e <gtk_widget_root>, user_data=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:12273
#40 0x00007ffff77465e0 in gtk_widget_real_root (widget=0x555558727fb0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:778
#41 0x00007ffff7567a20 in gtk_drop_down_root (widget=0x555558727fb0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkdropdown.c:520
#42 0x00007ffff77499c5 in gtk_widget_root (widget=0x555558727fb0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:2480
#43 0x00007ffff77514c1 in gtk_widget_reposition_after (widget=0x555558727fb0, parent=0x5555594312f0, previous_sibling=0x5555597021b0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:6081
#44 0x00007ffff775e449 in gtk_widget_insert_before (widget=0x555558727fb0, parent=0x5555594312f0, next_sibling=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:12255
#45 0x00007ffff75116eb in gtk_box_append (box=0x5555594312f0, child=0x555558727fb0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkbox.c:637
#46 0x00005555555aebcb in do_listview_selections (do_widget=0x555555cf13e0)
at ../../../../jhbuild/checkout/gnome/gtk/demos/gtk-demo/listview_selections.c:482
#47 0x00005555555d00bc in gtk_demo_run (self=0x555555ea4ec0, window=0x555555cf13e0)
at ../../../../jhbuild/checkout/gnome/gtk/demos/gtk-demo/main.c:154
#48 0x00005555555d1b58 in activate_cb (widget=0x555555dc98b0, position=52, window=0x555555cf13e0)
at ../../../../jhbuild/checkout/gnome/gtk/demos/gtk-demo/main.c:693
#49 0x00007ffff7f7131a in g_cclosure_marshal_VOID__UINTv (closure=0x555555ea2a90, return_value=0x0, instance=0x555555dc98b0,
args=0x7fffffffc0e8, marshal_data=0x0, n_params=1, param_types=0x555555de5d50)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gmarshal.c:704
#50 0x00007ffff7f6cfe3 in _g_closure_invoke_va (closure=0x555555ea2a90, return_value=0x0, instance=0x555555dc98b0,
args=0x7fffffffc0e8, n_params=1, param_types=0x555555de5d50) at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:895
#51 0x00007ffff7f8b791 in signal_emit_valist_unlocked (instance=0x555555dc98b0, signal_id=163, detail=0, var_args=0x7fffffffc0e8)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3516
#52 0x00007ffff7f8b16f in g_signal_emit_valist (instance=0x555555dc98b0, signal_id=163, detail=0, var_args=0x7fffffffc0e8)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3355
#53 0x00007ffff7f8c9fa in g_signal_emit (instance=0x555555dc98b0, signal_id=163, detail=0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3675
#54 0x00007ffff761d6bc in gtk_list_view_activate_item (widget=0x555555dc98b0, action_name=0x555555dc95e0 "list.activate-item",
parameter=0x555558c373a0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistview.c:839
#55 0x00007ffff779082e in gtk_action_muxer_activate_action (muxer=0x555555de77d0, action_name=0x7ffff7b191b7 "list.activate-item",
parameter=0x555558c373a0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkactionmuxer.c:858
#56 0x00007ffff779091c in gtk_action_muxer_activate_action (muxer=0x555555f865f0, action_name=0x7ffff7b191b7 "list.activate-item",
parameter=0x555558c373a0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkactionmuxer.c:877
#57 0x00007ffff775cbcd in gtk_widget_activate_action_variant (widget=0x555555f89fe0, name=0x7ffff7b191b7 "list.activate-item",
args=0x555558c373a0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:11615
#58 0x00007ffff775ccc0 in gtk_widget_activate_action (widget=0x555555f89fe0, name=0x7ffff7b191b7 "list.activate-item",
format_string=0x7ffff7b191b5 "u") at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:11656
#59 0x00007ffff7611f44 in gtk_list_factory_widget_click_gesture_pressed (gesture=0x555555f8a6c0, n_press=2, x=83.390625,
y=35.191410064697266, self=0x555555f89fe0) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtklistfactorywidget.c:424
#60 0x00007ffff74c7134 in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv (closure=0x555555f8a700, return_value=0x0, instance=0x555555f8a6c0,
args=0x7fffffffc8f8, marshal_data=0x0, n_params=3, param_types=0x555555cec350) at gtk/gtkmarshalers.c:3688
#61 0x00007ffff7f6cfe3 in _g_closure_invoke_va (closure=0x555555f8a700, return_value=0x0, instance=0x555555f8a6c0,
args=0x7fffffffc8f8, n_params=3, param_types=0x555555cec350) at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:895
#62 0x00007ffff7f8b791 in signal_emit_valist_unlocked (instance=0x555555f8a6c0, signal_id=91, detail=0, var_args=0x7fffffffc8f8)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3516
#63 0x00007ffff7f8b16f in g_signal_emit_valist (instance=0x555555f8a6c0, signal_id=91, detail=0, var_args=0x7fffffffc8f8)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3355
#64 0x00007ffff7f8c9fa in g_signal_emit (instance=0x555555f8a6c0, signal_id=91, detail=0)
(ins)--Type <RET> for more, q to quit, c to continue without paging--
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3675
#65 0x00007ffff75c5bf3 in gtk_gesture_click_begin (gesture=0x555555f8a6c0, sequence=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkgestureclick.c:230
#66 0x00007ffff7f723b9 in g_cclosure_marshal_VOID__BOXEDv (closure=0x555555d0a200, return_value=0x0, instance=0x555555f8a6c0,
args=0x7fffffffcf18, marshal_data=0x7ffff75c59fb <gtk_gesture_click_begin>, n_params=1, param_types=0x555555d385a0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gmarshal.c:1686
#67 0x00007ffff7f6d490 in g_type_class_meta_marshalv (closure=0x555555d0a200, return_value=0x0, instance=0x555555f8a6c0,
args=0x7fffffffcf18, marshal_data=0x110, n_params=1, param_types=0x555555d385a0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:1060
#68 0x00007ffff7f6cfe3 in _g_closure_invoke_va (closure=0x555555d0a200, return_value=0x0, instance=0x555555f8a6c0,
args=0x7fffffffcf18, n_params=1, param_types=0x555555d385a0) at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:895
#69 0x00007ffff7f8b791 in signal_emit_valist_unlocked (instance=0x555555f8a6c0, signal_id=86, detail=0, var_args=0x7fffffffcf18)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3516
#70 0x00007ffff7f8b16f in g_signal_emit_valist (instance=0x555555f8a6c0, signal_id=86, detail=0, var_args=0x7fffffffcf18)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3355
#71 0x00007ffff7f8c9fa in g_signal_emit (instance=0x555555f8a6c0, signal_id=86, detail=0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3675
#72 0x00007ffff75c11c0 in _gtk_gesture_set_recognized (gesture=0x555555f8a6c0, recognized=1, sequence=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkgesture.c:338
#73 0x00007ffff75c1338 in _gtk_gesture_check_recognized (gesture=0x555555f8a6c0, sequence=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkgesture.c:384
#74 0x00007ffff75c1bba in gtk_gesture_handle_event (controller=0x555555f8a6c0, event=0x5555585e1110, x=83.390625, y=35.191410064697266)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkgesture.c:655
#75 0x00007ffff75c7dce in gtk_gesture_single_handle_event (controller=0x555555f8a6c0, event=0x5555585e1110, x=83.390625,
y=35.191410064697266) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkgesturesingle.c:227
#76 0x00007ffff75c5fd5 in gtk_gesture_click_handle_event (controller=0x555555f8a6c0, event=0x5555585e1110, x=83.390625,
y=35.191410064697266) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkgestureclick.c:323
#77 0x00007ffff757bf26 in gtk_event_controller_handle_event (controller=0x555555f8a6c0, event=0x5555585e1110, target=0x555555f8b730,
x=83.390625, y=35.191410064697266) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkeventcontroller.c:362
#78 0x00007ffff774e4c4 in gtk_widget_run_controllers (widget=0x555555f89fe0, event=0x5555585e1110, target=0x555555f8b730, x=83.390625,
y=35.191410064697266, phase=GTK_PHASE_BUBBLE) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:4581
#79 0x00007ffff774eb22 in gtk_widget_event (widget=0x555555f89fe0, event=0x5555585e1110, target=0x555555f8b730)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwidget.c:4775
#80 0x00007ffff7621efe in gtk_propagate_event_internal (widget=0x555555f89fe0, event=0x5555585e1110, topmost=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkmain.c:1947
#81 0x00007ffff762207b in gtk_propagate_event (widget=0x555555f8b730, event=0x5555585e1110)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkmain.c:1997
#82 0x00007ffff7621840 in gtk_main_do_event (event=0x5555585e1110) at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkmain.c:1689
#83 0x00007ffff776d15a in surface_event (surface=0x555556187340, event=0x5555585e1110, widget=0x555555cf13e0)
at ../../../../jhbuild/checkout/gnome/gtk/gtk/gtkwindow.c:4830
#84 0x00007ffff79a0eee in _gdk_marshal_BOOLEAN__POINTERv (closure=0x5555584a72e0, return_value=0x7fffffffd810,
instance=0x555556187340, args=0x7fffffffda38, marshal_data=0x0, n_params=1, param_types=0x555556185350) at gdk/gdkmarshalers.c:302
#85 0x00007ffff7a5a4cb in gdk_surface_event_marshallerv (closure=0x5555584a72e0, return_value=0x7fffffffd810, instance=0x555556187340,
args=0x7fffffffda38, marshal_data=0x0, n_params=1, param_types=0x555556185350)
at ../../../../jhbuild/checkout/gnome/gtk/gdk/gdksurface.c:461
#86 0x00007ffff7f6cfe3 in _g_closure_invoke_va (closure=0x5555584a72e0, return_value=0x7fffffffd810, instance=0x555556187340,
args=0x7fffffffda38, n_params=1, param_types=0x555556185350) at ../../../../jhbuild/checkout/gnome/glib/gobject/gclosure.c:895
#87 0x00007ffff7f8b791 in signal_emit_valist_unlocked (instance=0x555556187340, signal_id=230, detail=0, var_args=0x7fffffffda38)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3516
#88 0x00007ffff7f8b16f in g_signal_emit_valist (instance=0x555556187340, signal_id=230, detail=0, var_args=0x7fffffffda38)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3355
#89 0x00007ffff7f8c9fa in g_signal_emit (instance=0x555556187340, signal_id=230, detail=0)
at ../../../../jhbuild/checkout/gnome/glib/gobject/gsignal.c:3675
#90 0x00007ffff7a5f4bd in gdk_surface_handle_event (event=0x5555585e1110)
at ../../../../jhbuild/checkout/gnome/gtk/gdk/gdksurface.c:2939
#91 0x00007ffff7a366a5 in _gdk_event_emit (event=0x5555585e1110) at ../../../../jhbuild/checkout/gnome/gtk/gdk/gdkevents.c:493
#92 0x00007ffff79bf737 in gdk_event_source_dispatch (base=0x555555c79470, callback=0x0, data=0x0)
at ../../../../jhbuild/checkout/gnome/gtk/gdk/wayland/gdkeventsource.c:142
#93 0x00007ffff72f2e61 in g_main_dispatch (context=0x555555c24390) at ../../../../jhbuild/checkout/gnome/glib/glib/gmain.c:3476
(ins)--Type <RET> for more, q to quit, c to continue without paging--
#94 0x00007ffff72f3edb in g_main_context_dispatch_unlocked (context=0x555555c24390)
at ../../../../jhbuild/checkout/gnome/glib/glib/gmain.c:4284
#95 0x00007ffff72f407a in g_main_context_iterate_unlocked (context=0x555555c24390, block=1, dispatch=1, self=0x555555c24500)
at ../../../../jhbuild/checkout/gnome/glib/glib/gmain.c:4349
#96 0x00007ffff72f4132 in g_main_context_iteration (context=0x555555c24390, may_block=1)
at ../../../../jhbuild/checkout/gnome/glib/glib/gmain.c:4414
#97 0x00007ffff7122f08 in g_application_run (application=0x555555c1cbd0, argc=1, argv=0x7fffffffdee8)
at ../../../../jhbuild/checkout/gnome/glib/gio/gapplication.c:2577
#98 0x00005555555d2fce in main (argc=1, argv=0x7fffffffdee8) at ../../../../jhbuild/checkout/gnome/gtk/demos/gtk-demo/main.c:1127
</pre>
</details>https://gitlab.gnome.org/GNOME/gtk/-/issues/5941Warning message on Windows: "Allocating size to GtkPopoverMenu [...] without ...2023-10-06T13:40:55ZTAO ZUHONGWarning message on Windows: "Allocating size to GtkPopoverMenu [...] without calling gtk_widget_measure()"Windows 11 22H2<br/>
GTK 4.11.4
App: gtk4-demo.exe
The warn messages throw while showing the popover menu:
```
(gtk4-demo.exe:12680): Gtk-WARNING **: 15:49:35.974: Allocating size to GtkPopoverMenu 00000195125c4e80 without calling gtk_w...Windows 11 22H2<br/>
GTK 4.11.4
App: gtk4-demo.exe
The warn messages throw while showing the popover menu:
```
(gtk4-demo.exe:12680): Gtk-WARNING **: 15:49:35.974: Allocating size to GtkPopoverMenu 00000195125c4e80 without calling gtk_widget_measure(). How does the code know the size to allocate?
(gtk4-demo.exe:12680): Gtk-WARNING **: 15:49:35.983: Allocating size to GtkPopoverMenu 00000195125c4e80 without calling gtk_widget_measure(). How does the code know the size to allocate?
(gtk4-demo.exe:12680): Gtk-WARNING **: 15:49:35.992: Allocating size to GtkPopoverMenu 00000195125c4e80 without calling gtk_widget_measure(). How does the code know the size to allocate?
(gtk4-demo.exe:12680): Gtk-WARNING **: 15:49:36.002: Allocating size to GtkPopoverMenu 00000195125c4e80 without calling gtk_widget_measure(). How does the code know the size to allocate?
```https://gitlab.gnome.org/GNOME/gtk/-/issues/5126Demo / Video player: Cannot exit fullscreen-mode without a keyboard2022-08-21T21:10:57ZLuca Bacciluca.bacci@outlook.comDemo / Video player: Cannot exit fullscreen-mode without a keyboardIt's possible to toggle fullscreen mode by pressing F11, anyway most people don't know that :slight_smile:It's possible to toggle fullscreen mode by pressing F11, anyway most people don't know that :slight_smile:https://gitlab.gnome.org/GNOME/gtk/-/issues/5125Demo / Menu: Popup at wrong position, hangs on Wayland2023-06-08T17:46:57ZLuca Bacciluca.bacci@outlook.comDemo / Menu: Popup at wrong position, hangs on Wayland**How to reproduce:**
1. Open `gtk4-demo`
2. Start the `Menu` demo
3. Change the zoom level (bottom `GtkScale`) to about the mid value
4. Move the horizontal `GtkScrollBar` a bit on the right
5. Right-click on the image
The popup is po...**How to reproduce:**
1. Open `gtk4-demo`
2. Start the `Menu` demo
3. Change the zoom level (bottom `GtkScale`) to about the mid value
4. Move the horizontal `GtkScrollBar` a bit on the right
5. Right-click on the image
The popup is positioned at a wrong position. It's interesting to note what happens thereafter on different backends:
* On Wayland the application hangs
* On X11 we get a few criticals about NULL `GdkMonitor`
* On Win32 we crash because we expect a non-NULL `GdkMonitor`
**System Info:**
* Arch Linux x86_64
* Gnome-Shell / Wayland
This is somewhat linked to https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4917https://gitlab.gnome.org/GNOME/gtk/-/issues/3872gtk-demo: Restructure demos2023-02-13T01:47:08ZMatthias Clasengtk-demo: Restructure demosIt would be nice to make the demos standalone, buildable programs, and have a 'Open in Builder/VSCode/etc' button.It would be nice to make the demos standalone, buildable programs, and have a 'Open in Builder/VSCode/etc' button.https://gitlab.gnome.org/GNOME/gtk/-/issues/2964gtk3-widget-factory: Delete key not working2020-09-27T02:04:27ZIsopodgtk3-widget-factory: Delete key not workingI noticed that you can't delete any text from the comboboxes and entries on Page 1 using the Delete key (Backspace works). This behavior only occurs in gtk3-widget-factory, not in gtk3-demo, gtk3-demo-application or any other application...I noticed that you can't delete any text from the comboboxes and entries on Page 1 using the Delete key (Backspace works). This behavior only occurs in gtk3-widget-factory, not in gtk3-demo, gtk3-demo-application or any other application. I suspect this is because Delete is bound as a shortcut on Page 2:
![image](/uploads/be6f6939a4a25f525b21d085a7a9fc01/image.png)
Since it only affects a demo application it is not exactly critical, but it did confuse me when I was testing the keyboard input patches I'm working on for Windows, because I initially thought there was something wrong with *my* code. It turns out the same thing happens with stock GTK, and even on Linux (I never noticed), so I guess that's just the way it is. It may be intentional, I dunno, but it's confusing for people who want to test keyboard input.https://gitlab.gnome.org/GNOME/gtk/-/issues/2817gtk_notebook_get_tab_label: assertion 'list != NULL' failed occurs when acces...2021-11-26T15:08:09ZJoanmarie Diggsgtk_notebook_get_tab_label: assertion 'list != NULL' failed occurs when accessibility tool runningSteps to reproduce:
1. Launch Accerciser
2. In a terminal, launch gtk3-demo
3. Click on the "x" to close gtk3-demo
Expected results: No console spew
Actual results:
(gtk3-demo:3762796): Gtk-CRITICAL **: 17:37:44.687: gtk_notebook_get...Steps to reproduce:
1. Launch Accerciser
2. In a terminal, launch gtk3-demo
3. Click on the "x" to close gtk3-demo
Expected results: No console spew
Actual results:
(gtk3-demo:3762796): Gtk-CRITICAL **: 17:37:44.687: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
(gtk3-demo:3762796): Gtk-CRITICAL **: 17:37:44.688: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
(gtk3-demo:3762796): Gtk-CRITICAL **: 17:37:44.689: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
(gtk3-demo:3762796): Gtk-CRITICAL **: 17:37:44.690: gtk_notebook_get_tab_label: assertion 'list != NULL' failed
(gtk3-demo:3762796): Gtk-CRITICAL **: 17:37:44.691: gtk_notebook_get_tab_label: assertion 'list != NULL' failed