RESOLVED FIXED 291372
REGRESSION(2.48): [GTK] Segfault when initialising on offscreen window
https://bugs.webkit.org/show_bug.cgi?id=291372
Summary REGRESSION(2.48): [GTK] Segfault when initialising on offscreen window
matevz.mihalic
Reported 2025-04-10 08:13:43 PDT
Initialising a webview with webkitgtk 2.48 on offscreen GTK window will segfault. This worked in previous version that was available in ubuntu packages (webkitgtk 2.46.6). Initialisation on normal window works as expected. The same issue happens in Wayland and X11. Minimal reproducible example: #include <gtk/gtk.h> #include <webkit2/webkit2.h> int main (int argc, char *argv[]) { gtk_init(&argc, &argv); GtkWidget *window = gtk_offscreen_window_new(); // this works: // GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget *view = webkit_web_view_new(); gtk_container_add(GTK_CONTAINER(window),view); webkit_web_view_load_uri(WEBKIT_WEB_VIEW(view),"https://www.example.com/"); gtk_widget_show_all(window); gtk_main(); return 0; } Error output: (main:126721): Gdk-CRITICAL **: 16:48:40.260: gdk_wayland_display_get_monitor_at_window: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed (main:126721): Gdk-CRITICAL **: 16:48:40.260: gdk_window_get_origin: assertion 'GDK_IS_WINDOW (window)' failed Thread 1 "main" received signal SIGSEGV, Segmentation fault. WebKit::ToplevelWindow::isInMonitor () at /usr/src/webkit2gtk-2.48.0-0ubuntu0.24.04.1/Source/WebKit/UIProcess/API/gtk/ToplevelWindow.cpp:147
Attachments
Crash backtrace (22.01 KB, text/plain)
2025-05-29 13:45 PDT, recipient59-webkit
no flags
stack trace (2.53 KB, text/plain)
2025-05-29 15:30 PDT, recipient59-webkit
no flags
stack trace (5.35 KB, text/plain)
2025-05-29 15:40 PDT, recipient59-webkit
no flags
stack trace (17.06 KB, text/plain)
2025-05-29 15:44 PDT, recipient59-webkit
no flags
recipient59-webkit
Comment 1 2025-05-29 09:40:09 PDT
+1. This has been a blocking regression for my application that relies on offscreen windows to generate web view snapshots.
Michael Catanzaro
Comment 2 2025-05-29 09:50:53 PDT
Please attach a stack trace taken using the environment variable G_DEBUG=fatal-criticals.
recipient59-webkit
Comment 3 2025-05-29 13:45:21 PDT
Created attachment 475422 [details] Crash backtrace WebKit: 2.48.1-0ubuntu0.24.04.1 GTK: 3.24.41-4ubuntu1.2 Application code: #include <gtk/gtk.h> #include <webkit2/webkit2.h> int main (int argc, char *argv[]) { gtk_init(&argc, &argv); auto *window = GTK_OFFSCREEN_WINDOW(gtk_offscreen_window_new()); auto *web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(web_view)); gtk_widget_show_all(GTK_WIDGET(window)); gtk_main(); return 0; }
Michael Catanzaro
Comment 4 2025-05-29 14:30:36 PDT
Try following these instructions to take the stack trace: https://handbook.gnome.org/issues/stack-traces.html
recipient59-webkit
Comment 5 2025-05-29 15:30:10 PDT
Created attachment 475424 [details] stack trace
recipient59-webkit
Comment 6 2025-05-29 15:40:07 PDT
Created attachment 475425 [details] stack trace
recipient59-webkit
Comment 7 2025-05-29 15:44:12 PDT
Created attachment 475426 [details] stack trace
Michael Catanzaro
Comment 8 2025-05-29 17:00:05 PDT
I think this is a GTK 3 bug, because gdk_window_new() is not documented to be nullable. Not worth reporting, because this API is gone in GTK 4.
Michael Catanzaro
Comment 9 2025-05-29 17:05:21 PDT
Also, this WebKit code hasn't been touched in a couple years, so I have no clue why it regressed recently. But whatever.
Michael Catanzaro
Comment 10 2025-05-29 17:11:22 PDT
Albrecht Dreß
Comment 11 2025-06-06 11:49:09 PDT
Hi, I re-built the latest Debian package libwebkit2gtk-4.1-0_2.48.3-1~deb12u1_amd64.deb with a slightly modified version your patch/PR (as I think calling gdk_window_new() with a NULL arg might cause the CRITICAL on Trixie, see my message https://lists.webkit.org/pipermail/webkit-gtk/2025-June/004052.html) <snip> --- webkit2gtk-2.48.1/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp.orig 2025-06-05 13:39:24.056402262 +0000 +++ webkit2gtk-2.48.1/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2025-06-05 13:44:41.788305280 +0000 @@ -651,12 +651,14 @@ gint attributesMask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; - GdkWindow* window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributesMask); - gtk_widget_set_window(widget, window); - gdk_window_set_user_data(window, widget); + if (gtk_widget_get_parent_window(widget) != NULL) { + GdkWindow* window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributesMask); + gtk_widget_set_window(widget, window); + gdk_window_set_user_data(window, widget); - auto* monitor = gdk_display_get_monitor_at_window(gtk_widget_get_display(widget), window); - webkitWebViewBaseUpdateDisplayID(webView, monitor); + auto* monitor = gdk_display_get_monitor_at_window(gtk_widget_get_display(widget), window); + webkitWebViewBaseUpdateDisplayID(webView, monitor); + } #endif auto* imContext = priv->inputMethodFilter.context(); </snip> Now, the sample code from my aforementioned messages crashed at a different place, but at least I now can provide a BT: <snip> #0 WebKit::ToplevelWindow::isInMonitor() const () at ./build-soup3/./Source/WebKit/UIProcess/API/gtk/ToplevelWindow.cpp:147 #1 0x00007ffff366c43a in webkitWebViewBaseUpdateVisibility() () at ./build-soup3/./Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:491 #2 0x00007ffff366f330 in webkitWebViewBaseMap() () at ./build-soup3/./Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1085 #3 0x00007ffff7f4e4e0 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #4 0x00007ffff7f67bbf in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #5 0x00007ffff7f67dbf in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #6 0x00007ffff2179fa2 in gtk_widget_map () at /lib/x86_64-linux-gnu/libgtk-3.so.0 #7 0x00007ffff2193050 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0 #8 0x00007ffff7f4e5a9 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #9 0x00007ffff7f67bbf in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #10 0x00007ffff7f67dbf in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #11 0x00007ffff2179fa2 in gtk_widget_map () at /lib/x86_64-linux-gnu/libgtk-3.so.0 #12 0x00007ffff203d793 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0 #13 0x00007ffff7f4e3b0 in g_closure_invoke () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #14 0x00007ffff7f60d2d in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #15 0x00007ffff7f67bf5 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #16 0x00007ffff7f67dbf in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #17 0x00007ffff2173d16 in gtk_widget_show () at /lib/x86_64-linux-gnu/libgtk-3.so.0 #18 0x0000555555555446 in activate (app=<optimized out>, user_data=<optimized out>) at sample.c:37 context = 0x555555769190 offline_window = 0x5555558b6520 view = 0x55555562f8e0 surface = 0x0 #19 0x00007ffff7f4e3b0 in g_closure_invoke () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #20 0x00007ffff7f61076 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #21 0x00007ffff7f67bf5 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #22 0x00007ffff7f67dbf in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #23 0x00007ffff1bc5438 in () at /lib/x86_64-linux-gnu/libgio-2.0.so.0 #24 0x00007ffff1bc55c6 in g_application_run () at /lib/x86_64-linux-gnu/libgio-2.0.so.0 #25 0x0000555555555251 in main (argc=<optimized out>, argv=<optimized out>) at sample.c:75 app = 0x5555555860f0 status = <optimized out> </snip> Thanks, Albrecht.
Albrecht Dreß
Comment 12 2025-06-08 10:13:03 PDT
(In reply to Michael Catanzaro from comment #8) > I think this is a GTK 3 bug, because gdk_window_new() is not documented to > be nullable. Not worth reporting, because this API is gone in GTK 4. At least in Debian Bookworm, the last update of libgtk-3-0 was <snip> gtk+3.0 (3.24.38-2~deb12u3) bookworm; urgency=medium * Non-maintainer upload. * d/p/atk_focus_tracker_notify.deprecated.patch: Fix letting Orca announce initial focus (Closes: #1084489) -- Samuel Thibault <sthibault@debian.org> Fri, 25 Oct 2024 20:17:45 +0200 </snip> but as I noted in https://lists.webkit.org/pipermail/webkit-gtk/2025-June/004052.html, the crashes occur since the update to libwebkit2gtk-4.1-0 2.48, i.e. after 2025-03-14. Thus IMHO a Gtk bug is unlikely.
Carlos Garcia Campos
Comment 13 2025-06-09 03:33:36 PDT
EWS
Comment 14 2025-06-10 08:33:51 PDT
Committed 296038@main (bee121586080): <https://commits.webkit.org/296038@main> Reviewed commits have been landed. Closing PR #46494 and removing active labels.
Note You need to log in before you can comment on or make changes to this bug.