[Webkit-unassigned] [Bug 253858] [GTK] Crash in webkit_web_view_session_state_new()

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Mar 14 22:53:17 PDT 2023


https://bugs.webkit.org/show_bug.cgi?id=253858

Carlos Garcia Campos <cgarcia at igalia.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |cgarcia at igalia.com

--- Comment #9 from Carlos Garcia Campos <cgarcia at igalia.com> ---
(In reply to Michael Catanzaro from comment #7)
> (In reply to Christian Hergert from comment #6)
> > Is there an init function I can force-call?
> 
> No. We need to call webkitInitialize() but it's not public.
> 
> I really want to add this to class init in WTFGType.h to ensure every public
> type calls the init function, but can't do that because WTF cannot depend on
> WebKit stuff. Could have WebKit register some delegate function, but to do
> that, it would have to first be initialized, chicken/egg, so that's no good.
> Probably not a good idea to use a library constructor. So I think best we
> can do is manually call it at the top of class init for all API types, or at
> least all types that really need it. Currently that's done only for a few
> types:
> 
> $ git grep webkitInitialize
> WebKit/UIProcess/API/glib/WebKitInitialize.cpp:void webkitInitialize()
> WebKit/UIProcess/API/glib/WebKitInitialize.h:void webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitInputMethodContext.cpp:   
> WebKit::webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitNetworkSession.cpp:    webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitSettings.cpp:    webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitUserContentFilterStore.cpp:   
> webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitUserContentManager.cpp:   
> webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitWebContext.cpp:    webkitInitialize();
> WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:   
> webkitInitialize();
> WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:    // Usually starting a
> context triggers webkitInitialize, but in case
> WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:   
> WebKit::webkitInitialize();
> 
> I first tried this:
> 
> -G_DEFINE_BOXED_TYPE(WebKitWebViewSessionState,
> webkit_web_view_session_state, webkit_web_view_session_state_ref,
> webkit_web_view_session_state_unref)
> +G_DEFINE_BOXED_TYPE_WITH_CODE(WebKitWebViewSessionState,
> webkit_web_view_session_state, webkit_web_view_session_state_ref,
> webkit_web_view_session_state_unref, webkitInitialize())
> 
> But it's not enough because the crash occurs in
> webkit_web_view_session_state_new() before the WebKitWebViewSessionState
> object is actually created. That's an awkward location for a
> webkitInitialize() call, but it seems unavoidable. So fix is:
> 
> diff --git a/Source/WebKit/UIProcess/API/glib/WebKitWebViewSessionState.cpp
> b/Source/WebKit/UIProcess/API/glib/WebKitWebViewSessionState.cpp
> index c34347b08ab3..b58bc19b44c0 100644
> --- a/Source/WebKit/UIProcess/API/glib/WebKitWebViewSessionState.cpp
> +++ b/Source/WebKit/UIProcess/API/glib/WebKitWebViewSessionState.cpp
> @@ -20,6 +20,7 @@
>  #include "config.h"
>  #include "WebKitWebViewSessionState.h"
>  
> +#include "WebKitInitialize.h"
>  #include "WebKitWebViewSessionStatePrivate.h"
>  #include <WebCore/BackForwardItemIdentifier.h>
>  #include <wtf/glib/GRefPtr.h>
> @@ -459,6 +460,8 @@ WebKitWebViewSessionState*
> webkit_web_view_session_state_new(GBytes* data)
>  {
>      g_return_val_if_fail(data, nullptr);
>  
> +    webkitInitialize();
> +
>      SessionState sessionState;
>      if (!decodeSessionState(data, sessionState))
>          return nullptr;

This is indeed the right fix.

> Normally this is where I would prepare a pull request, but we have to fix
> bug #253758 first.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20230315/8eafca33/attachment.htm>


More information about the webkit-unassigned mailing list