From 4b9593f024e58d2403238a95c505e00968ac27c2 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Tue, 3 Jun 2025 13:31:30 -0600 Subject: [PATCH] lsteamclient: Handle NULL pRequestServersResponse in ISteamMatchmakingServers. CW-Bug-Id: #25488 --- .../unix_steam_matchmaking_manual.cpp | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lsteamclient/unix_steam_matchmaking_manual.cpp b/lsteamclient/unix_steam_matchmaking_manual.cpp index ddd4bb30..46683726 100644 --- a/lsteamclient/unix_steam_matchmaking_manual.cpp +++ b/lsteamclient/unix_steam_matchmaking_manual.cpp @@ -272,12 +272,13 @@ static NTSTATUS ISteamMatchmakingServers_RequestSpectatorServerList( u_ISteamMat template< typename Iface, typename Params > static NTSTATUS ISteamMatchmakingServers_RequestInternetServerList( Iface *iface, Params *params, bool wow64 ) { - SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret ); + auto w_response = params->pRequestServersResponse; + SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( w_response, params->_ret ); struct w_request *w_request = u_response->w_request; MatchMakingKeyValuePair_t **filters = params->ppchFilters ? new MatchMakingKeyValuePair_t *[params->nFilters] : nullptr; for (int i = 0; filters && i < params->nFilters; i++) filters[i] = params->ppchFilters[i]; - w_request->u_request = iface->RequestInternetServerList( params->iApp, filters, params->nFilters, u_response ); + w_request->u_request = iface->RequestInternetServerList( params->iApp, filters, params->nFilters, w_response ? u_response : nullptr ); if (filters) delete[] filters; if (!w_request->u_request) delete u_response; @@ -288,9 +289,10 @@ static NTSTATUS ISteamMatchmakingServers_RequestInternetServerList( Iface *iface template< typename Iface, typename Params > static NTSTATUS ISteamMatchmakingServers_RequestLANServerList( Iface *iface, Params *params, bool wow64 ) { - SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret ); + auto w_response = params->pRequestServersResponse; + SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( w_response, params->_ret ); struct w_request *w_request = u_response->w_request; - w_request->u_request = iface->RequestLANServerList( params->iApp, u_response ); + w_request->u_request = iface->RequestLANServerList( params->iApp, w_response ? u_response : nullptr ); if (!w_request->u_request) delete u_response; else w_request->u_response = u_response; return 0; @@ -299,12 +301,13 @@ static NTSTATUS ISteamMatchmakingServers_RequestLANServerList( Iface *iface, Par template< typename Iface, typename Params > static NTSTATUS ISteamMatchmakingServers_RequestFriendsServerList( Iface *iface, Params *params, bool wow64 ) { - SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret ); + auto w_response = params->pRequestServersResponse; + SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( w_response, params->_ret ); struct w_request *w_request = u_response->w_request; MatchMakingKeyValuePair_t **filters = params->ppchFilters ? new MatchMakingKeyValuePair_t *[params->nFilters] : nullptr; for (int i = 0; filters && i < params->nFilters; i++) filters[i] = params->ppchFilters[i]; - w_request->u_request = iface->RequestFriendsServerList( params->iApp, filters, params->nFilters, u_response ); + w_request->u_request = iface->RequestFriendsServerList( params->iApp, filters, params->nFilters, w_response ? u_response : nullptr ); if (filters) delete[] filters; if (!w_request->u_request) delete u_response; @@ -315,12 +318,13 @@ static NTSTATUS ISteamMatchmakingServers_RequestFriendsServerList( Iface *iface, template< typename Iface, typename Params > static NTSTATUS ISteamMatchmakingServers_RequestFavoritesServerList( Iface *iface, Params *params, bool wow64 ) { - SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret ); + auto w_response = params->pRequestServersResponse; + SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( w_response, params->_ret ); struct w_request *w_request = u_response->w_request; MatchMakingKeyValuePair_t **filters = params->ppchFilters ? new MatchMakingKeyValuePair_t *[params->nFilters] : nullptr; for (int i = 0; filters && i < params->nFilters; i++) filters[i] = params->ppchFilters[i]; - w_request->u_request = iface->RequestFavoritesServerList( params->iApp, filters, params->nFilters, u_response ); + w_request->u_request = iface->RequestFavoritesServerList( params->iApp, filters, params->nFilters, w_response ? u_response : nullptr ); if (filters) delete[] filters; if (!w_request->u_request) delete u_response; @@ -331,12 +335,13 @@ static NTSTATUS ISteamMatchmakingServers_RequestFavoritesServerList( Iface *ifac template< typename Iface, typename Params > static NTSTATUS ISteamMatchmakingServers_RequestHistoryServerList( Iface *iface, Params *params, bool wow64 ) { - SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret ); + auto w_response = params->pRequestServersResponse; + SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( w_response, params->_ret ); struct w_request *w_request = u_response->w_request; MatchMakingKeyValuePair_t **filters = params->ppchFilters ? new MatchMakingKeyValuePair_t *[params->nFilters] : nullptr; for (int i = 0; filters && i < params->nFilters; i++) filters[i] = params->ppchFilters[i]; - w_request->u_request = iface->RequestHistoryServerList( params->iApp, filters, params->nFilters, u_response ); + w_request->u_request = iface->RequestHistoryServerList( params->iApp, filters, params->nFilters, w_response ? u_response : nullptr ); delete[] filters; if (!w_request->u_request) delete u_response; @@ -347,12 +352,13 @@ static NTSTATUS ISteamMatchmakingServers_RequestHistoryServerList( Iface *iface, template< typename Iface, typename Params > static NTSTATUS ISteamMatchmakingServers_RequestSpectatorServerList( Iface *iface, Params *params, bool wow64 ) { - SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret ); + auto w_response = params->pRequestServersResponse; + SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( w_response, params->_ret ); struct w_request *w_request = u_response->w_request; MatchMakingKeyValuePair_t **filters = params->ppchFilters ? new MatchMakingKeyValuePair_t *[params->nFilters] : nullptr; for (int i = 0; filters && i < params->nFilters; i++) filters[i] = params->ppchFilters[i]; - w_request->u_request = iface->RequestSpectatorServerList( params->iApp, filters, params->nFilters, u_response ); + w_request->u_request = iface->RequestSpectatorServerList( params->iApp, filters, params->nFilters, w_response ? u_response : nullptr ); delete[] filters; if (!w_request->u_request) delete u_response;