Skip to content

Commit 517c11f

Browse files
committed
We must use a CefRefPtr<> here also, otherwise the SchemeHandlerWrapper instance will have been deallocated sometimes, which is a Very Bad Idea<™> if we still expect it to be able to be used...
1 parent d8b68dd commit 517c11f

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

CefSharp/SchemeHandlerResponse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace CefSharp
55
{
66
void SchemeHandlerResponse::OnRequestCompleted()
77
{
8-
_schemeHandlerWrapper->ProcessRequestCallback(this);
8+
_schemeHandlerWrapper->get()->ProcessRequestCallback(this);
99
}
1010
}

CefSharp/SchemeHandlerResponse.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace CefSharp
1414
public ref class SchemeHandlerResponse
1515
{
1616
internal:
17-
SchemeHandlerWrapper* _schemeHandlerWrapper;
17+
CefRefPtr<SchemeHandlerWrapper>* _schemeHandlerWrapper;
1818
void OnRequestCompleted();
1919

2020
public:
@@ -28,7 +28,12 @@ namespace CefSharp
2828

2929
SchemeHandlerResponse(SchemeHandlerWrapper* schemeHandlerWrapper)
3030
{
31-
_schemeHandlerWrapper = schemeHandlerWrapper;
31+
_schemeHandlerWrapper = new CefRefPtr<SchemeHandlerWrapper>(schemeHandlerWrapper);
32+
}
33+
34+
void ReleaseSchemeHandlerWrapper()
35+
{
36+
delete _schemeHandlerWrapper;
3237
}
3338
};
3439
};

CefSharp/SchemeHandlerWrapper.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ namespace CefSharp
5656
_headers = ToHeaderMap(response->ResponseHeaders);
5757

5858
_callback->HeadersAvailable();
59+
60+
// Must be done AFTER CEF has been allowed to consume the headers etc. After this call is made, the SchemeHandlerWrapper
61+
// instance has likely been deallocated.
62+
response->ReleaseSchemeHandlerWrapper();
5963
}
6064

6165
void SchemeHandlerWrapper::GetResponseHeaders(CefRefPtr<CefResponse> response, int64& response_length, CefString& redirectUrl)

0 commit comments

Comments
 (0)