You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebKit2GTK4修改SoupMessageHeaders致WebPageProcess崩溃问题

崩溃原因

核心问题有两个,均会直接触发Web进程段错误崩溃:

  1. 信号回调函数签名完全不匹配:WebKitWebPage的send-request信号回调原型要求第三个参数是WebKitURIResponse**(二级指针,用于存储重定向响应对象),且必须预留第四个gpointer user_data参数位置。原有代码把第三个参数定义为WebKitURIResponse*实例指针,且没有留user_data参数位,C语言信号连接没有运行时参数类型校验,信号触发时参数压栈错位会直接破坏栈内存,后续所有栈上变量(包括拿到的http_headers指针)都会变成野指针,调用soup_message_headers_replace时自然会访问非法内存崩溃。
  2. Soup版本混链风险:当前主流发行版提供的webkit2gtk-4.0依赖Soup 2,webkit2gtk-4.1依赖Soup 3,两个版本的SoupMessageHeaders结构体布局、接口ABI完全不兼容。如果编译时头文件引入和实际链接的WebKit依赖的Soup版本不一致,即使指针地址正确,调用接口时也会触发内存访问错误。

另外原有代码还有一个非崩溃类逻辑问题:用strncmp(type, "GET", 3)匹配请求方法,会误匹配GETH、GETPOST这类非标准方法,存在逻辑漏洞。

修复方案

按照以下步骤修改即可:

  • 严格按照send-request信号的官方原型修正回调函数签名
  • 调用soup_message_headers_replace前先校验http_headers指针非空
  • 编译时确保链接的Soup版本和WebKit2GTK版本对应:使用webkit2gtk-4.0时链接soup-2.4,使用webkit2gtk-4.1时链接soup-3.0
  • 用g_strcmp0做字符串比较,避免方法误匹配

修复后的完整代码如下:

#include <webkit2/webkit-web-extension.h>

static gboolean set_http_headers(WebKitWebPage *page, WebKitURIRequest *req,
                                 WebKitURIResponse **redirected_res, gpointer user_data)
{
    SoupMessageHeaders *http_headers = webkit_uri_request_get_http_headers(req);
    const gchar *type = webkit_uri_request_get_http_method(req);

    if (g_strcmp0(type, "GET") == 0 && http_headers != NULL)
    {
        soup_message_headers_replace(http_headers, "Accept-Encoding", "gzip, deflate, br");
        soup_message_headers_replace(http_headers, "Accept-Language", "en-US,en;q=0.5");
    }

    return FALSE;
}

static void wp_handle_cb(WebKitWebExtension *webext, WebKitWebPage *wp, gpointer dummy)
{
    g_signal_connect_object(wp, "send-request", G_CALLBACK(set_http_headers), NULL, 0);
}

G_MODULE_EXPORT void webkit_web_extension_initialize(WebKitWebExtension *webext)
{
    g_signal_connect(webext, "page-created", G_CALLBACK(wp_handle_cb), NULL);
}

注意:如果是为Soup3版本编译,brotli压缩编码默认已经被WebKit支持,不需要额外配置,设置该头不会引发功能异常。

内容的提问来源于stack exchange,提问作者Ömer Gök

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:57:26