electron: 3.0 regression: crash on exit after https tunneling through a proxy requiring negotiate auth
- Output of
node_modules/.bin/electron --version: v3.0.0-beta.8 x86 - Operating System (Platform and Version): win7 sp1 x64 & x86
- Output of
node_modules/.bin/electron --versionon last known working Electron version (if applicable): v2.0.8
Expected Behavior no crash
Actual behavior crash after calling app.exit()
To Reproduce
required to repro:
- a proxy
- requiring negotiate auth (no auth and basic seem to be ok)
- must tunnel https through it
run (substitute proxy host and creds in the command and script)
electron --proxy-server=proxyhost:8080 proxy-crash.js
proxy-crash.js
'use strict';
const {app, BrowserWindow, session} = require('electron'),
OFFSCREEN = true;
let win;
if (OFFSCREEN)
app.disableHardwareAcceleration();
app.on('ready', async () => {
win = new BrowserWindow({
width: 1440,
height: 900,
useContentSize: true,
show: !OFFSCREEN,
webPreferences: {
nodeIntegration: false,
partition: 'memory_partition_1',
offscreen: OFFSCREEN
},
});
if (OFFSCREEN) {
win.webContents.setFrameRate(1);
win.webContents.stopPainting();
}
win.webContents.on('did-start-navigation', (event, url, isInPlace, isMainFrame, frameProcessId, frameRoutingId) => {
if (isMainFrame && !isInPlace)
log('did-start-navigation: %s\n', url);
});
win.webContents.on('did-navigate', (event, url, httpResponseCode, httpStatusText) => {
log('did-navigate: %i %s\n', httpResponseCode, url);
});
win.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame, frameProcessId, frameRoutingId) => {
if (isMainFrame)
log('did-fail-load:\n%O\n', {errorCode, errorDescription, validatedURL});
});
win.webContents.on('did-finish-load', event => {
log('did-finish-load: %s\n', win.webContents.getURL());
});
win.webContents.on('did-start-loading', event => {
log('did-start-loading\n');
});
win.webContents.on('did-stop-loading', event => {
log('did-stop-loading: %s\n', win.webContents.getURL());
if (OFFSCREEN)
setTimeout(closeWindow);
//exit();
});
win.webContents.on('login', (event, request, authInfo, callback) => {
log('webContents.login:\n%O\n,', {...request, ...authInfo});
if (authInfo.isProxy)
callback('proxy_user', 'proxy_pass');
});
win.on('closed', () => {
log('win.closed\n');
});
win.loadURL('https://www.google.com/');
});
app.on('window-all-closed', () => {
log('app.window-all-closed: scheduling exit\n');
win = null;
setTimeout(exit, 3000);
});
function closeWindow() {
log('closing window\n');
win.destroy();
win = null;
}
function exit() {
log('exiting\n');
app.exit();
}
function log(msg, ...args) {
console.log(`[${new Date().toISOString()}] ${msg}`, ...args);
}
Additional Information
console.log
[2018-08-31T21:42:25.059Z] did-start-loading
[2018-08-31T21:42:25.061Z] did-start-navigation: https://www.google.com/
[2018-08-31T21:42:25.659Z] webContents.login:
{ headers:
{ Accept:
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Upgrade-Insecure-Requests': '1',
'User-Agent':
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Electron/3.0.0-beta.8 Safari/537.36' },
method: 'GET',
referrer: '',
url: 'https://www.google.com/',
isProxy: true,
scheme: 'negotiate',
host: 'proxyhost',
port: 8080,
realm: '' }
,
[2018-08-31T21:42:25.911Z] did-navigate: 200 https://www.google.com/
[2018-08-31T21:42:26.331Z] did-finish-load: https://www.google.com/
[2018-08-31T21:42:26.333Z] did-stop-loading: https://www.google.com/
[2018-08-31T21:42:26.337Z] closing window
[2018-08-31T21:42:26.341Z] app.window-all-closed: scheduling exit
[2018-08-31T21:42:26.342Z] win.closed
[2018-08-31T21:42:29.343Z] exiting
crash happens after app.exit, not on window close
Unhandled exception at 0x00002928 in electron.exe: 0xC0000005: Access violation executing location 0x00002928
stack trace
wininet.dll!76457475()
[Inline Frame] electron.exe!std::default_delete<net::HttpAuthHandler>::operator()(net::HttpAuthHandler *) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::HttpAuthHandler,std::default_delete<net::HttpAuthHandler> >::{dtor}() Line 2203
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2203)
electron.exe!net::HttpAuthController::~HttpAuthController() Line 143
at c:\projects\libchromiumcontent-wqq1s\src\net\http\http_auth_controller.cc(143)
electron.exe!net::HttpAuthController::`scalar deleting destructor'(unsigned int)
[Inline Frame] electron.exe!base::RefCounted<ppapi::Resource,base::DefaultRefCountedTraits<ppapi::Resource> >::DeleteInternal(const ppapi::Resource *) Line 334
at c:\projects\libchromiumcontent-wqq1s\src\base\memory\ref_counted.h(334)
[Inline Frame] electron.exe!base::DefaultRefCountedTraits<ppapi::Resource>::Destruct(const ppapi::Resource *) Line 300
at c:\projects\libchromiumcontent-wqq1s\src\base\memory\ref_counted.h(300)
[Inline Frame] electron.exe!base::RefCounted<ppapi::Resource,base::DefaultRefCountedTraits<ppapi::Resource> >::Release() Line 323
at c:\projects\libchromiumcontent-wqq1s\src\base\memory\ref_counted.h(323)
electron.exe!scoped_refptr<ppapi::proxy::FileRefResource>::Release(ppapi::proxy::FileRefResource * ptr=0x09f07100) Line 281
at c:\projects\libchromiumcontent-wqq1s\src\base\memory\scoped_refptr.h(281)
[Inline Frame] electron.exe!scoped_refptr<net::HttpAuthController>::{dtor}() Line 208
at c:\projects\libchromiumcontent-wqq1s\src\base\memory\scoped_refptr.h(208)
electron.exe!net::HttpProxyClientSocket::~HttpProxyClientSocket() Line 62
at c:\projects\libchromiumcontent-wqq1s\src\net\http\http_proxy_client_socket.cc(62)
electron.exe!net::HttpProxyClientSocket::`scalar deleting destructor'(unsigned int)
[Inline Frame] electron.exe!std::default_delete<net::ProxyClientSocket>::operator()(net::ProxyClientSocket *) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::ProxyClientSocket,std::default_delete<net::ProxyClientSocket> >::{dtor}() Line 2203
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2203)
electron.exe!net::HttpProxyClientSocketWrapper::~HttpProxyClientSocketWrapper() Line 102
at c:\projects\libchromiumcontent-wqq1s\src\net\http\http_proxy_client_socket_wrapper.cc(102)
electron.exe!net::HttpProxyClientSocketWrapper::`scalar deleting destructor'(unsigned int)
[Inline Frame] electron.exe!std::default_delete<net::StreamSocket>::operator()(net::StreamSocket *) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::StreamSocket,std::default_delete<net::StreamSocket> >::reset(net::StreamSocket *) Line 2238
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2238)
electron.exe!net::internal::ClientSocketPoolBaseHelper::ReleaseSocket(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & group_name={...}, std::unique_ptr<net::StreamSocket,std::default_delete<net::StreamSocket> > socket={...}, int id=0) Line 872
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_pool_base.cc(872)
[Inline Frame] electron.exe!net::ClientSocketPoolBase<net::HttpProxySocketParams>::ReleaseSocket(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &) Line 829
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_pool_base.h(829)
electron.exe!net::HttpProxyClientSocketPool::ReleaseSocket(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & group_name={...}, std::unique_ptr<net::StreamSocket,std::default_delete<net::StreamSocket> > socket={...}, int id=0) Line 356
at c:\projects\libchromiumcontent-wqq1s\src\net\http\http_proxy_client_socket_pool.cc(356)
electron.exe!net::ClientSocketHandle::ResetInternal(bool cancel=true) Line 65
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_handle.cc(65)
electron.exe!net::ClientSocketHandle::Reset() Line 47
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_handle.cc(47)
electron.exe!net::ClientSocketHandle::~ClientSocketHandle() Line 32
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_handle.cc(32)
electron.exe!std::default_delete<net::ClientSocketHandle>::operator()(net::ClientSocketHandle * _Ptr=0x069613b0) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::ClientSocketHandle,std::default_delete<net::ClientSocketHandle> >::{dtor}() Line 2203
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2203)
electron.exe!net::SSLClientSocketImpl::~SSLClientSocketImpl() Line 473
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\ssl_client_socket_impl.cc(473)
electron.exe!net::SSLClientSocketImpl::`scalar deleting destructor'(unsigned int)
[Inline Frame] electron.exe!std::default_delete<net::StreamSocket>::operator()(net::StreamSocket *) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::StreamSocket,std::default_delete<net::StreamSocket> >::reset(net::StreamSocket *) Line 2238
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2238)
electron.exe!net::internal::ClientSocketPoolBaseHelper::ReleaseSocket(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & group_name={...}, std::unique_ptr<net::StreamSocket,std::default_delete<net::StreamSocket> > socket={...}, int id=0) Line 872
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_pool_base.cc(872)
[Inline Frame] electron.exe!net::ClientSocketPoolBase<net::SSLSocketParams>::ReleaseSocket(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &) Line 829
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_pool_base.h(829)
electron.exe!net::SSLClientSocketPool::ReleaseSocket(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & group_name={...}, std::unique_ptr<net::StreamSocket,std::default_delete<net::StreamSocket> > socket={...}, int id=0) Line 666
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\ssl_client_socket_pool.cc(666)
electron.exe!net::ClientSocketHandle::ResetInternal(bool cancel=true) Line 65
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_handle.cc(65)
electron.exe!net::ClientSocketHandle::Reset() Line 47
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_handle.cc(47)
electron.exe!net::ClientSocketHandle::~ClientSocketHandle() Line 32
at c:\projects\libchromiumcontent-wqq1s\src\net\socket\client_socket_handle.cc(32)
electron.exe!std::default_delete<net::ClientSocketHandle>::operator()(net::ClientSocketHandle * _Ptr=0x06961060) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::ClientSocketHandle,std::default_delete<net::ClientSocketHandle> >::{dtor}() Line 2203
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2203)
electron.exe!net::SpdySession::~SpdySession() Line 848
at c:\projects\libchromiumcontent-wqq1s\src\net\spdy\chromium\spdy_session.cc(848)
electron.exe!net::SpdySession::`scalar deleting destructor'(unsigned int)
[Inline Frame] electron.exe!std::default_delete<net::SpdySession>::operator()(net::SpdySession *) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::SpdySession,std::default_delete<net::SpdySession> >::{dtor}() Line 2203
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2203)
electron.exe!net::SpdySessionPool::RemoveUnavailableSession(const base::WeakPtr<net::SpdySession> & unavailable_session) Line 312
at c:\projects\libchromiumcontent-wqq1s\src\net\spdy\chromium\spdy_session_pool.cc(312)
electron.exe!net::SpdySessionPool::~SpdySessionPool() Line 87
at c:\projects\libchromiumcontent-wqq1s\src\net\spdy\chromium\spdy_session_pool.cc(87)
electron.exe!net::HttpNetworkSession::~HttpNetworkSession() Line 277
at c:\projects\libchromiumcontent-wqq1s\src\net\http\http_network_session.cc(277)
electron.exe!net::HttpNetworkSession::`scalar deleting destructor'(unsigned int)
[Inline Frame] electron.exe!std::default_delete<net::HttpNetworkSession>::operator()(net::HttpNetworkSession *) Line 1999
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(1999)
[Inline Frame] electron.exe!std::unique_ptr<net::HttpNetworkSession,std::default_delete<net::HttpNetworkSession> >::reset(net::HttpNetworkSession *) Line 2238
at c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\memory(2238)
electron.exe!brightray::URLRequestContextGetter::NotifyContextShuttingDown(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> > resource_context={...}) Line 192
at c:\projects\electron-39ng6\brightray\browser\url_request_context_getter.cc(192)
[Inline Frame] electron.exe!base::internal::FunctorTraits<void (__thiscall brightray::URLRequestContextGetter::*)(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> >),void>::Invoke(void(brightray::URLRequestContextGetter::*)(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> >) method=0x00340aa0, brightray::URLRequestContextGetter * &&) Line 447
at c:\projects\electron-39ng6\vendor\download\libchromiumcontent\src\base\bind_internal.h(447)
[Inline Frame] electron.exe!base::internal::InvokeHelper<0,void>::MakeItSo(void(brightray::URLRequestContextGetter::*)(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> >) &&) Line 530
at c:\projects\electron-39ng6\vendor\download\libchromiumcontent\src\base\bind_internal.h(530)
[Inline Frame] electron.exe!base::internal::Invoker<base::internal::BindState<void (__thiscall brightray::URLRequestContextGetter::*)(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> >),base::internal::RetainedRefWrapper<brightray::URLRequestContextGetter>,std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> > >,void __cdecl(void)>::RunImpl(void(brightray::URLRequestContextGetter::*)(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> >) &&) Line 604
at c:\projects\electron-39ng6\vendor\download\libchromiumcontent\src\base\bind_internal.h(604)
electron.exe!base::internal::Invoker<base::internal::BindState<void (__thiscall brightray::URLRequestContextGetter::*)(std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> >),base::internal::RetainedRefWrapper<brightray::URLRequestContextGetter>,std::unique_ptr<brightray::ResourceContext,std::default_delete<brightray::ResourceContext> > >,void __cdecl(void)>::RunOnce(base::internal::BindStateBase * base=0x09e93bf0) Line 576
at c:\projects\electron-39ng6\vendor\download\libchromiumcontent\src\base\bind_internal.h(576)
[Inline Frame] electron.exe!base::OnceCallback<void __cdecl(void)>::Run() Line 95
at c:\projects\electron-39ng6\vendor\download\libchromiumcontent\src\base\callback.h(95)
electron.exe!base::debug::TaskAnnotator::RunTask(const char * queue_function=0x02fda88c, base::PendingTask * pending_task=0x0728fa50) Line 61
at c:\projects\libchromiumcontent-wqq1s\src\base\debug\task_annotator.cc(61)
[Inline Frame] electron.exe!base::internal::IncomingTaskQueue::RunTask(base::PendingTask *) Line 124
at c:\projects\libchromiumcontent-wqq1s\src\base\message_loop\incoming_task_queue.cc(124)
electron.exe!base::MessageLoop::RunTask(base::PendingTask * pending_task=0x0728fa50) Line 396
at c:\projects\libchromiumcontent-wqq1s\src\base\message_loop\message_loop.cc(396)
electron.exe!base::MessageLoop::DeferOrRunPendingTask(base::PendingTask pending_task={...}) Line 407
at c:\projects\libchromiumcontent-wqq1s\src\base\message_loop\message_loop.cc(407)
electron.exe!base::MessageLoop::DoWork() Line 451
at c:\projects\libchromiumcontent-wqq1s\src\base\message_loop\message_loop.cc(451)
electron.exe!base::MessagePumpForIO::DoRunLoop() Line 475
at c:\projects\libchromiumcontent-wqq1s\src\base\message_loop\message_pump_win.cc(475)
electron.exe!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate=0x0374a520) Line 58
at c:\projects\libchromiumcontent-wqq1s\src\base\message_loop\message_pump_win.cc(58)
electron.exe!base::RunLoop::Run() Line 139
at c:\projects\libchromiumcontent-wqq1s\src\base\run_loop.cc(139)
electron.exe!base::Thread::Run(base::RunLoop * run_loop=0x0728fbcc) Line 256
at c:\projects\libchromiumcontent-wqq1s\src\base\threading\thread.cc(256)
electron.exe!content::BrowserThreadImpl::IOThreadRun(base::RunLoop * run_loop=0x0728fbcc) Line 234
at c:\projects\libchromiumcontent-wqq1s\src\content\browser\browser_thread_impl.cc(234)
electron.exe!content::BrowserThreadImpl::Run(base::RunLoop * run_loop=0x0728fbcc) Line 260
at c:\projects\libchromiumcontent-wqq1s\src\content\browser\browser_thread_impl.cc(260)
electron.exe!base::Thread::ThreadMain() Line 341
at c:\projects\libchromiumcontent-wqq1s\src\base\threading\thread.cc(341)
electron.exe!base::`anonymous namespace'::ThreadFunc(void * params=0x068f8ab8) Line 93
at c:\projects\libchromiumcontent-wqq1s\src\base\threading\platform_thread_win.cc(93)
kernel32.dll!@BaseThreadInitThunk@12()
ntdll.dll!___RtlUserThreadStart@8()
ntdll.dll!__RtlUserThreadStart@8()
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Reactions: 1
- Comments: 22 (21 by maintainers)
Thanks for confirming, backporting https://github.com/electron/electron/pull/14656 should fix in this case. I will do it sometime this week, if anyone wants to work on it before then, ping me. The entire PR is not needed only parts of it.
@zcbenz Would like to point out that negotiate authenticating proxy is the most common type in windows corporate environments (that have proxies) and https is the most likely content that would be loaded through it and one can’t just opt out of the proxy, so this would seem like a high severity issue that should block 3.0