Fix use-after-free in MoQ Chat Server. When the server is tearing down, it triggers session teardown logic that calls server functions. Those calls should exit early. Repro now passes. PiperOrigin-RevId: 713340105
diff --git a/quiche/quic/moqt/tools/chat_server.cc b/quiche/quic/moqt/tools/chat_server.cc index 871390b..e6a03f9 100644 --- a/quiche/quic/moqt/tools/chat_server.cc +++ b/quiche/quic/moqt/tools/chat_server.cc
@@ -77,7 +77,6 @@ [this](absl::string_view error_message) { std::cout << "Session terminated, reason = " << error_message << "\n"; session_ = nullptr; - server_->DeleteSession(it_); if (track_name_.has_value()) { server_->DeleteUser(*track_name_); } @@ -205,6 +204,9 @@ } void ChatServer::DeleteUser(FullTrackName track_name) { + if (!is_running_) { + return; + } // RemoveAllSubscriptions() sends a SUBSCRIBE_DONE for each. user_queues_[track_name]->RemoveAllSubscriptions(); user_queues_.erase(track_name);