MicrosoftEdge / MicrosoftEdge/WebView2Feedback

[Problem/Bug]: Application Crashes on Post call from webview2

Open
#4,308 8 comments 0 reactions 1 assignee View on GitHub

@vbryh-msft is already working on this.

Since Jan 19, 2024.

bug
Dominant language
PowerShell
Stars
526
Forks
67
PR merge metrics
No merged PRs in 30d

Description

What happened?

We have a react application hosted in a webview2 (version 98.0.1108.62) launched from MFC desktop application. Occassionally, the application crashes when making a Post API call using axios library.

Note: We have seen this crash on webview2 version (118.0.2088.69) as well

Below is the call stack. We have address sanitizer configured which reports "Deallocation Of freed memory" exception during the crash.

KernelBase.dll!_RaiseException@16()
OurAppWebView.ocx!__vcasan::OnAsanReport(const char * description, const char * report, bool __throw) Line 600
at D:\a_work\1\s\src\vctools\crt\asan\vcasan\vcasan.cpp(600)
OurAppWebView.ocx!__vcasan::ReportCallback(const char * szReport) Line 324
at D:\a_work\1\s\src\vctools\crt\asan\vcasan\vcasan.cpp(324)
clang_rt.asan_dbg_dynamic-i386.dll!__asan::ScopedInErrorReport::~ScopedInErrorReport(void)
clang_rt.asan_dbg_dynamic-i386.dll!__asan::ReportDoubleFree(unsigned long,struct __sanitizer::BufferedStackTrace *)
clang_rt.asan_dbg_dynamic-i386.dll!__asan::Allocator::Deallocate(void *,unsigned long,unsigned long,struct __sanitizer::BufferedStackTrace *,enum __asan::AllocType)
clang_rt.asan_dbg_dynamic-i386.dll!__asan::asan_free(void *,struct __sanitizer::BufferedStackTrace *,enum __asan::AllocType)
clang_rt.asan_dbg_dynamic-i386.dll!___asan_wrap_RtlFreeHeap@12()
combase.dll!CRetailMalloc_Free(IMalloc * pThis, void * pv) Line 658
at onecore\com\combase\class\memapi.cxx(658)
oleaut32.dll!APP_DATA::FreeCachedMem()
oleaut32.dll!VariantClear()
EmbeddedBrowserWebView.dll!base::win::ScopedVariant::~ScopedVariant(void)
EmbeddedBrowserWebView.dll!embedded_browser_webview_current::EmbeddedBrowserHost::PostMethodCall(int,class std::__1::basic_string<char,struct std::__1::char_traits,class std::__1::allocator > const &,class std::__1::basic_string<char,struct std::__1::char_traits,class std::__1::allocator > const &,class absl::optional<class std::__1::basic_string<char,struct std::__1::char_traits,class std::__1::allocator > > const &,int)
EmbeddedBrowserWebView.dll!embedded_browser_webview_current::EmbeddedBrowserHost::PostMethodCallSync(int,class std::__1::basic_string<char,struct std::__1::char_traits,class std::__1::allocator > const &,class std::__1::basic_string<char,struct std::__1::char_traits,class std::__1::allocator > const &,class absl::optional<class std::__1::basic_string<char,struct std::__1::char_traits,class std::__1::allocator > > const &,int,class base::OnceCallback)
EmbeddedBrowserWebView.dll!embedded_browser::mojom::HostStubDispatch::AcceptWithResponder(class embedded_browser::mojom::Host *,class mojo::Message *,class std::__1::unique_ptr<class mojo::MessageReceiverWithStatus,struct std::__1::default_delete >)
EmbeddedBrowserWebView.dll!embedded_browser::mojom::HostStub<struct mojo::RawPtrImplRefTraits >::AcceptWithResponder(class mojo::Message *,class std::__1::unique_ptr<class mojo::MessageReceiverWithStatus,struct std::__1::default_delete >)
EmbeddedBrowserWebView.dll!mojo::InterfaceEndpointClient::HandleValidatedMessage()
EmbeddedBrowserWebView.dll!mojo::MessageDispatcher::Accept(class mojo::Message )
EmbeddedBrowserWebView.dll!mojo::InterfaceEndpointClient::HandleIncomingMessage(class mojo::Message )
EmbeddedBrowserWebView.dll!mojo::internal::MultiplexRouter::ProcessIncomingMessage()
EmbeddedBrowserWebView.dll!mojo::internal::MultiplexRouter::Accept(class mojo::Message )
EmbeddedBrowserWebView.dll!mojo::MessageDispatcher::Accept(class mojo::Message )
EmbeddedBrowserWebView.dll!mojo::Connector::DispatchMessageW()
EmbeddedBrowserWebView.dll!mojo::Connector::ReadAllAvailableMessages()
EmbeddedBrowserWebView.dll!mojo::Connector::OnHandleReadyInternal()
EmbeddedBrowserWebView.dll!base::internal::Invoker<base::internal::BindState<void (embedded_browser::mojom::EmbeddedBrowserClient_OnPermissionRequest_ProxyToResponder::
)(embedded_browser::mojom::PermissionState) attribute((thiscall)),std::__1::unique_ptr<embedded_browser::mojom::EmbeddedBrowserClient_OnPermissionRequest_ProxyToResponder,std::__1::default_delete<embedded_browser::mojom::EmbeddedBrowserClient_OnPermissionRequest_ProxyToResponder>>>,void (embedded_browser::mojom::PermissionState)>::RunOnce()
EmbeddedBrowserWebView.dll!mojo::SimpleWatcher::DiscardReadyState()
EmbeddedBrowserWebView.dll!base::internal::Invoker<base::internal::BindState<void (
)(const base::RepeatingCallback<void (unsigned int)> &, unsigned int, const mojo::HandleSignalsState &),base::RepeatingCallback<void (unsigned int)>>,void (unsigned int, const mojo::HandleSignalsState &)>::Run()
EmbeddedBrowserWebView.dll!mojo::SimpleWatcher::OnHandleReady()
EmbeddedBrowserWebView.dll!base::internal::Invoker<base::internal::BindState<void (mojo::SimpleWatcher::
)(int, unsigned int, const mojo::HandleSignalsState &) attribute((thiscall)),base::WeakPtrmojo::SimpleWatcher,int,unsigned int,mojo::HandleSignalsState>,void ()>::RunOnce()
EmbeddedBrowserWebView.dll!base::TaskAnnotator::RunTaskImpl(struct base::PendingTask &)
EmbeddedBrowserWebView.dll!base::TaskAnnotator::RunTask<>()
EmbeddedBrowserWebView.dll!embedded_browser_webview::internal::AppTaskRunner::DoWork()
EmbeddedBrowserWebView.dll!embedded_browser_webview::internal::AppTaskRunner::MessageCallback()
EmbeddedBrowserWebView.dll!base::internal::Invoker<base::internal::BindState<bool (embedded_browser_webview::internal::AppTaskRunner::
)(unsigned int, unsigned int, long, long *) attribute((thiscall)),base::internal::UnretainedWrapper<embedded_browser_webview::internal::AppTaskRunner>>,bool (unsigned int, unsigned int, long, long )>::Run()
EmbeddedBrowserWebView.dll!base::win::MessageWindow::WindowProc()
EmbeddedBrowserWebView.dll!base::win::WrappedWindowProc<&base::win::MessageWindow::WindowProc>()
user32.dll!__InternalCallWinProc@20()
user32.dll!UserCallWinProcCheckWow()
user32.dll!DispatchMessageWorker()
user32.dll!_DispatchMessageA@4()
mfc140d.dll!AfxInternalPumpMessage() Line 181
at D:\a_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\thrdcore.cpp(181)
mfc140d.dll!CWinThread::PumpMessage() Line 900
at D:\a_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\thrdcore.cpp(900)
mfc140d.dll!CWinThread::Run() Line 629
at D:\a_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\thrdcore.cpp(629)
OurApp.dll!COurAppThrd::Run() Line 439
at C:\code\OurApp\OurApp.cpp(439)
mfc140d.dll!_AfxThreadEntry(void * pParam) Line 122
at D:\a_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\thrdcore.cpp(122)
ucrtbased.dll!thread_start<unsigned int (__stdcall
)(void *),1>(void * const parameter) Line 97
at minkernel\crts\ucrt\src\appcrt\startup\thread.cpp(97)
clang_rt.asan_dbg_dynamic-i386.dll!__asan::AsanThread::ThreadStart(unsigned __int64,struct __sanitizer::atomic_uintptr_t *)
clang_rt.asan_dbg_dynamic-i386.dll!asan_thread_start()
kernel32.dll!@BaseThreadInitThunk@12()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll!__RtlUserThreadStart@8()

Importance

Important. My app's user experience is significantly compromised.

Runtime Channel

Stable release (WebView2 Runtime)

Runtime Version

98.0.1108.62

SDK Version

1.0.1108.44

Framework

Win32

Operating System

Windows 10, Windows 11, Windows Server

OS Version

No response

Repro steps

An API call is made via axios Post method like below:

const service = async () => {
	console.log("CustomPost"+payload.uri);
	return axiosInstance.post(payload.uri, payload.data);
};

The api call does reach our service layer, but the hosting application crashes before the call completes.

Repros in Edge Browser

Not Applicable

Regression

No, this never worked

Last working version (if regression)

No response

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.