Changeset 268910 in webkit
- Timestamp:
- Oct 23, 2020, 1:25:31 AM (6 years ago)
- Location:
- releases/WebKitGTK/webkit-2.30/Source/WebKit
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/soup/WebSocketTaskSoup.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
releases/WebKitGTK/webkit-2.30/Source/WebKit/ChangeLog
r268451 r268910 1 2020-10-23 Michael Catanzaro <mcatanzaro@gnome.org> 2 3 [SOUP] Fix crash in WebSocketTask 4 https://bugs.webkit.org/show_bug.cgi?id=217892 5 6 Reviewed by Carlos Garcia Campos. 7 8 The WebSocketTask connects to the "starting" signal of its SoupMessage and never disconnects 9 this signal, which is only safe if it is guaranteed to outlive its SoupMessage. However, it 10 is not. We crash when the signal is emitted after the WebSocketTask is destroyed. To solve 11 this, we just need to disconnect the signal when required. Normally that would be done in 12 the destructor, but the WebSocketTask drops its ownership of the SoupMessage prior to that 13 point, so we need to disconnect on each possible paths. 14 15 * NetworkProcess/soup/WebSocketTaskSoup.cpp: 16 (WebKit::WebSocketTask::~WebSocketTask): 17 (WebKit::WebSocketTask::didConnect): 18 (WebKit::WebSocketTask::didFail): 19 1 20 2020-10-10 Adrian Perez de Castro <aperez@igalia.com> 2 21 -
releases/WebKitGTK/webkit-2.30/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.cpp
r267695 r268910 90 90 WebSocketTask::~WebSocketTask() 91 91 { 92 if (m_handshakeMessage) 93 g_signal_handlers_disconnect_by_data(m_handshakeMessage.get(), this); 94 92 95 cancel(); 93 96 } … … 134 137 response.updateFromSoupMessage(m_handshakeMessage.get()); 135 138 m_channel.didReceiveHandshakeResponse(WTFMove(response)); 139 g_signal_handlers_disconnect_by_data(m_handshakeMessage.get(), this); 136 140 m_handshakeMessage = nullptr; 137 141 } … … 173 177 response.updateFromSoupMessage(m_handshakeMessage.get()); 174 178 m_channel.didReceiveHandshakeResponse(WTFMove(response)); 179 g_signal_handlers_disconnect_by_data(m_handshakeMessage.get(), this); 175 180 m_handshakeMessage = nullptr; 176 181 }
Note:
See TracChangeset
for help on using the changeset viewer.