wpe: segfault when loading HTTPS page with no certificates installed
I had an Ubuntu container where ca-certificates
was not installed.
When opening HTTPS page in iframe
within HTTP page nothing happens/renders, but when loading HTTPS page directly it segfaults beautifully:
#0 0x00007f404c46c7e3 in s_loadFailed (failing_uri=0x7f40340140f0 "\360\364\001\070@\177", error=0x1, data=<optimized out>) at ../ext/wpe/WPEThreadedView.cpp:214
#1 0x00007f4056182ff5 in ?? () from target:/lib/x86_64-linux-gnu/libffi.so.7
#2 0x00007f405618240a in ?? () from target:/lib/x86_64-linux-gnu/libffi.so.7
#3 0x00007f4056aa830d in g_cclosure_marshal_generic () from target:/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#4 0x00007f4056aa7802 in g_closure_invoke () from target:/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#5 0x00007f4056abb814 in ?? () from target:/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#6 0x00007f4056ac645d in g_signal_emit_valist () from target:/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7 0x00007f4056ac70d3 in g_signal_emit () from target:/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8 0x00007f3f6847e326 in webkitWebViewLoadFailedWithTLSErrors(_WebKitWebView*, char const*, _GError*, GTlsCertificateFlags, _GTlsCertificate*) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#9 0x00007f3f6845beaa in NavigationClient::didFailProvisionalNavigationWithError(WebKit::WebPageProxy&, WebKit::FrameInfoData&&, API::Navigation*, WebCore::ResourceError const&, API::Object*) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#10 0x00007f3f6839e3ab in WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared(WTF::Ref<WebKit::WebProcessProxy, WTF::DumbPtrTraits<WebKit::WebProcessProxy> >&&, WTF::ObjectIdentifier<WebCore::FrameIdentifierType>, WebKit::FrameInfoData&&, WebCore::ResourceRequest&&, unsigned long, WTF::String const&, WebCore::ResourceError const&, WebCore::WillContinueLoading, WebKit::UserData const&) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#11 0x00007f3f683c081c in WebKit::WebPageProxy::didFailProvisionalLoadForFrame(WTF::ObjectIdentifier<WebCore::FrameIdentifierType>, WebKit::FrameInfoData&&, WebCore::ResourceRequest&&, unsigned long, WTF::String const&, WebCore::ResourceError const&, WebCore::WillContinueLoading, WebKit::UserData const&) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#12 0x00007f3f680e2b59 in void IPC::handleMessage<Messages::WebPageProxy::DidFailProvisionalLoadForFrame, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(WTF::ObjectIdentifier<WebCore::FrameIdentifierType>, WebKit::FrameInfoData&&, WebCore::ResourceRequest&&, unsigned long, WTF::String const&, WebCore::ResourceError const&, WebCore::WillContinueLoading, WebKit::UserData const&)>(IPC::Decoder&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(WTF::ObjectIdentifier<WebCore::FrameIdentifierType>, WebKit::FrameInfoData&&, WebCore::ResourceRequest&&, unsigned long, WTF::String const&, WebCore::ResourceError const&, WebCore::WillContinueLoading, WebKit::UserData const&)) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#13 0x00007f3f680bdc0f in WebKit::WebPageProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#14 0x00007f3f682dff30 in IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::Decoder&) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#15 0x00007f3f68395dc3 in non-virtual thunk to WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#16 0x00007f3f682d8bf8 in IPC::Connection::dispatchMessage(IPC::Decoder&) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#17 0x00007f3f682da72d in IPC::Connection::dispatchMessage(std::unique_ptr<IPC::Decoder, std::default_delete<IPC::Decoder> >) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#18 0x00007f3f682dafc3 in IPC::Connection::dispatchIncomingMessages() () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#19 0x00007f3f6b1761d8 in WTF::RunLoop::performWork() () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#20 0x00007f3f6b1e2d0d in WTF::RunLoop::RunLoop()::{lambda(void*)#1}::_FUN(void*) () from target:/lib/x86_64-linux-gnu/libWPEWebKit-1.0.so.3
#21 0x00007f40569bbe8e in g_main_context_dispatch () from target:/lib/x86_64-linux-gnu/libglib-2.0.so.0
#22 0x00007f40569bc240 in ?? () from target:/lib/x86_64-linux-gnu/libglib-2.0.so.0
#23 0x00007f40569bc533 in g_main_loop_run () from target:/lib/x86_64-linux-gnu/libglib-2.0.so.0
#24 0x00007f404c46c606 in WPEContextThread::s_viewThread (data=0x7f3fa0005270) at ../ext/wpe/WPEThreadedView.cpp:156
#25 0x00007f40569e5931 in ?? () from target:/lib/x86_64-linux-gnu/libglib-2.0.so.0
#26 0x00007f40564f5609 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0
#27 0x00007f40563ff103 in clone () from target:/lib/x86_64-linux-gnu/libc.so.6
I guess some graceful handling for this case is missing, probably affects more than just certificates missing, but also other reasons of page failing to load.
I'm on master branches of everything with philn/gst-plugins-bad@5644a4e5 on top and these:
- libwpe 1.7.1
- libwpebackend-fdo 1.7.1
- libwpewebkit 2.29.90
And with LIBGL_ALWAYS_SOFTWARE=true
(because no GPU)
Simple LIBGL_ALWAYS_SOFTWARE=true gst-launch-1.0 wpesrc location=https://google.com num-buffers=10 ! video/x-raw, format=BGRA ! fakesink
is enough to reproduce as soon as there is no SSL/TLS root certificates installed.