diff options
author | Patric Stout <truebrain@openttd.org> | 2021-09-05 18:17:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-05 18:17:39 +0200 |
commit | f656b0ae966052327a6341be8dee65cfd2f395b8 (patch) | |
tree | 09e16baa180811f756c4959d7736ed5c5dfdefab /src/network/network_turn.h | |
parent | 9c74dc2468afbcbfb2acbee4ac6a56c7a8173529 (diff) | |
download | openttd-f656b0ae966052327a6341be8dee65cfd2f395b8.tar.xz |
Fix: use-after-free after ClientNetworkCoordinatorSocketHandler::CloseAllConnections() (#9534)
The function clears all stun-handlers. This causes all of those
objects to be destroyed.
A handler can have a pending connecter, which was only killed in
case CloseConnection() was called. This is never the case when
the object is destroyed. In result, the connecter could finish
and cause a use-after-free by calling into the (now deleted)
handler.
Diffstat (limited to 'src/network/network_turn.h')
-rw-r--r-- | src/network/network_turn.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/network/network_turn.h b/src/network/network_turn.h index cc569a977..fba25447a 100644 --- a/src/network/network_turn.h +++ b/src/network/network_turn.h @@ -30,6 +30,7 @@ public: ClientNetworkTurnSocketHandler(const std::string &token, uint8 tracking_number, const std::string &connection_string) : token(token), tracking_number(tracking_number), connection_string(connection_string) {} NetworkRecvStatus CloseConnection(bool error = true) override; + ~ClientNetworkTurnSocketHandler() override; void SendReceive(); void Connect(); |