Check return value of GetPlayerNetInfo (bug 4315, r=fyren).
authorDavid Anderson <dvander@alliedmods.net>
Tue Apr 27 23:40:04 2010 -0700 (2010-04-27)
changeset 2961c3bb13e8760b
parent 2960 95f5f8a4b7dc
child 2962 130639d897c2
child 2964 1067c471a8a2
Check return value of GetPlayerNetInfo (bug 4315, r=fyren).
core/PlayerManager.cpp
core/smn_console.cpp
core/smn_player.cpp
plugins/include/clients.inc
     1.1 --- a/core/PlayerManager.cpp	Tue Apr 27 21:07:59 2010 -0700
     1.2 +++ b/core/PlayerManager.cpp	Tue Apr 27 23:40:04 2010 -0700
     1.3 @@ -1619,8 +1619,22 @@
     1.4  {
     1.5  	MarkAsBeingKicked();
     1.6  	INetChannel *pNetChan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(m_iIndex));
     1.7 -	IClient *pClient = static_cast<IClient *>(pNetChan->GetMsgHandler());
     1.8 -	pClient->Disconnect("%s", str);
     1.9 +	if (pNetChan == NULL)
    1.10 +	{
    1.11 +		/* What does this even mean? Hell if I know. */
    1.12 +		int userid = GetUserId();
    1.13 +		if (userid > 0)
    1.14 +		{
    1.15 +			char buffer[255];
    1.16 +			UTIL_Format(buffer, sizeof(buffer), "kickid %d %s\n", userid, str);
    1.17 +			engine->ServerCommand(buffer);
    1.18 +		}
    1.19 +	}
    1.20 +	else
    1.21 +	{
    1.22 +		IClient *pClient = static_cast<IClient *>(pNetChan->GetMsgHandler());
    1.23 +		pClient->Disconnect("%s", str);
    1.24 +	}
    1.25  }
    1.26  
    1.27  void CPlayer::Authorize_Post()
     2.1 --- a/core/smn_console.cpp	Tue Apr 27 21:07:59 2010 -0700
     2.2 +++ b/core/smn_console.cpp	Tue Apr 27 23:40:04 2010 -0700
     2.3 @@ -200,8 +200,8 @@
     2.4  
     2.5  		if (pPlayer && pPlayer->IsInGame() && !pPlayer->IsFakeClient())
     2.6  		{
     2.7 -			INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(i));
     2.8 -			netchan->SendData(buffer);
     2.9 +			if (INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(i)))
    2.10 +				netchan->SendData(buffer);
    2.11  		}
    2.12  	}
    2.13  }
    2.14 @@ -1319,6 +1319,11 @@
    2.15  	}
    2.16  
    2.17  	INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(params[1]));
    2.18 +	if (netchan == NULL)
    2.19 +	{
    2.20 +		return 0;
    2.21 +	}
    2.22 +
    2.23  	netchan->SendData(buffer);
    2.24  
    2.25  	return 1;
     3.1 --- a/core/smn_player.cpp	Tue Apr 27 21:07:59 2010 -0700
     3.2 +++ b/core/smn_player.cpp	Tue Apr 27 23:40:04 2010 -0700
     3.3 @@ -720,6 +720,10 @@
     3.4  	}
     3.5  
     3.6  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
     3.7 +	if (pInfo == NULL)
     3.8 +	{
     3.9 +		return 0;
    3.10 +	}
    3.11  
    3.12  	return sp_ftoc(pInfo->GetTimeConnected());
    3.13  }
    3.14 @@ -739,6 +743,10 @@
    3.15  	}
    3.16  
    3.17  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.18 +	if (pInfo == NULL)
    3.19 +	{
    3.20 +		return 0;
    3.21 +	}
    3.22  
    3.23  	return pInfo->GetDataRate();
    3.24  }
    3.25 @@ -758,6 +766,10 @@
    3.26  	}
    3.27  
    3.28  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.29 +	if (pInfo == NULL)
    3.30 +	{
    3.31 +		return 1;
    3.32 +	}
    3.33  
    3.34  	return pInfo->IsTimingOut() ? 1 : 0;
    3.35  }
    3.36 @@ -782,6 +794,10 @@
    3.37  	}
    3.38  
    3.39  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.40 +	if (pInfo == NULL)
    3.41 +	{
    3.42 +		return sp_ftoc(-1);
    3.43 +	}
    3.44  
    3.45  	if (params[2] == MAX_FLOWS)
    3.46  	{
    3.47 @@ -815,6 +831,10 @@
    3.48  	}
    3.49  
    3.50  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.51 +	if (pInfo == NULL)
    3.52 +	{
    3.53 +		return sp_ftoc(-1);
    3.54 +	}
    3.55  
    3.56  	if (params[2] == MAX_FLOWS)
    3.57  	{
    3.58 @@ -848,6 +868,10 @@
    3.59  	}
    3.60  
    3.61  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.62 +	if (pInfo == NULL)
    3.63 +	{
    3.64 +		return sp_ftoc(-1);
    3.65 +	}
    3.66  
    3.67  	if (params[2] == MAX_FLOWS)
    3.68  	{
    3.69 @@ -881,6 +905,10 @@
    3.70  	}
    3.71  
    3.72  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.73 +	if (pInfo == NULL)
    3.74 +	{
    3.75 +		return sp_ftoc(-1);
    3.76 +	}
    3.77  
    3.78  	if (params[2] == MAX_FLOWS)
    3.79  	{
    3.80 @@ -914,6 +942,10 @@
    3.81  	}
    3.82  
    3.83  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.84 +	if (pInfo == NULL)
    3.85 +	{
    3.86 +		return 0;
    3.87 +	}
    3.88  
    3.89  	if (params[2] == MAX_FLOWS)
    3.90  	{
    3.91 @@ -948,6 +980,11 @@
    3.92  
    3.93  	INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
    3.94  
    3.95 +	if (pInfo == NULL)
    3.96 +	{
    3.97 +		return 0;
    3.98 +	}
    3.99 +
   3.100  	if (params[2] == MAX_FLOWS)
   3.101  	{
   3.102  		value = pInfo->GetAvgPackets(FLOW_INCOMING) + pInfo->GetAvgPackets(FLOW_OUTGOING);
     4.1 --- a/plugins/include/clients.inc	Tue Apr 27 21:07:59 2010 -0700
     4.2 +++ b/plugins/include/clients.inc	Tue Apr 27 23:40:04 2010 -0700
     4.3 @@ -601,7 +601,7 @@
     4.4   *
     4.5   * @param client		Player's index.
     4.6   * @param flow			Traffic flowing direction.
     4.7 - * @return				Latency.
     4.8 + * @return				Latency, or -1 if network info is not available.
     4.9   * @error				Invalid client index, client not in game, or fake client.
    4.10   */
    4.11  native Float:GetClientLatency(client, NetFlow:flow);
    4.12 @@ -611,7 +611,7 @@
    4.13   *
    4.14   * @param client		Player's index.
    4.15   * @param flow			Traffic flowing direction.
    4.16 - * @return				Average latency.
    4.17 + * @return				Latency, or -1 if network info is not available.
    4.18   * @error				Invalid client index, client not in game, or fake client.
    4.19   */
    4.20  native Float:GetClientAvgLatency(client, NetFlow:flow);
    4.21 @@ -621,7 +621,7 @@
    4.22   *
    4.23   * @param client		Player's index.
    4.24   * @param flow			Traffic flowing direction.
    4.25 - * @return				Average packet loss.
    4.26 + * @return				Average packet loss, or -1 if network info is not available.
    4.27   * @error				Invalid client index, client not in game, or fake client.
    4.28   */
    4.29  native Float:GetClientAvgLoss(client, NetFlow:flow);
    4.30 @@ -631,7 +631,7 @@
    4.31   *
    4.32   * @param client		Player's index.
    4.33   * @param flow			Traffic flowing direction.
    4.34 - * @return				Average packet choke.
    4.35 + * @return				Average packet loss, or -1 if network info is not available.
    4.36   * @error				Invalid client index, client not in game, or fake client.
    4.37   */
    4.38  native Float:GetClientAvgChoke(client, NetFlow:flow);