Check return value of GetPlayerNetInfo (bug 4315, r=fyren).
Check return value of GetPlayerNetInfo (
bug 4315, r=fyren).
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);