Checks to avoid null dereferences in NetworkServer
Various commands in NetworkServer require extra data. However, if the packet size is set to 0 for these, the code will skip over reading the data in and allocating memory. This results in null dereferences. This patch adds checks to the relevant commands to make sure they don't continue reading a null pointer.
This commit is contained in:
parent
b87980965d
commit
f02223d6ba
1 changed files with 30 additions and 0 deletions
|
|
@ -461,10 +461,20 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PACKET_ID_SET_CLIENT_NAME:
|
case NET_PACKET_ID_SET_CLIENT_NAME:
|
||||||
|
if(data == NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ProcessRequest_ClientString(client_sock, header.pkt_size, data);
|
ProcessRequest_ClientString(client_sock, header.pkt_size, data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PACKET_ID_RGBCONTROLLER_RESIZEZONE:
|
case NET_PACKET_ID_RGBCONTROLLER_RESIZEZONE:
|
||||||
|
if(data == NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if((header.pkt_dev_idx < controllers.size()) && (header.pkt_size == (2 * sizeof(int))))
|
if((header.pkt_dev_idx < controllers.size()) && (header.pkt_size == (2 * sizeof(int))))
|
||||||
{
|
{
|
||||||
int zone;
|
int zone;
|
||||||
|
|
@ -478,6 +488,11 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PACKET_ID_RGBCONTROLLER_UPDATELEDS:
|
case NET_PACKET_ID_RGBCONTROLLER_UPDATELEDS:
|
||||||
|
if(data == NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(header.pkt_dev_idx < controllers.size())
|
if(header.pkt_dev_idx < controllers.size())
|
||||||
{
|
{
|
||||||
controllers[header.pkt_dev_idx]->SetColorDescription((unsigned char *)data);
|
controllers[header.pkt_dev_idx]->SetColorDescription((unsigned char *)data);
|
||||||
|
|
@ -486,6 +501,11 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PACKET_ID_RGBCONTROLLER_UPDATEZONELEDS:
|
case NET_PACKET_ID_RGBCONTROLLER_UPDATEZONELEDS:
|
||||||
|
if(data == NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(header.pkt_dev_idx < controllers.size())
|
if(header.pkt_dev_idx < controllers.size())
|
||||||
{
|
{
|
||||||
int zone;
|
int zone;
|
||||||
|
|
@ -498,6 +518,11 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PACKET_ID_RGBCONTROLLER_UPDATESINGLELED:
|
case NET_PACKET_ID_RGBCONTROLLER_UPDATESINGLELED:
|
||||||
|
if(data == NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(header.pkt_dev_idx < controllers.size())
|
if(header.pkt_dev_idx < controllers.size())
|
||||||
{
|
{
|
||||||
int led;
|
int led;
|
||||||
|
|
@ -517,6 +542,11 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PACKET_ID_RGBCONTROLLER_UPDATEMODE:
|
case NET_PACKET_ID_RGBCONTROLLER_UPDATEMODE:
|
||||||
|
if(data == NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(header.pkt_dev_idx < controllers.size())
|
if(header.pkt_dev_idx < controllers.size())
|
||||||
{
|
{
|
||||||
controllers[header.pkt_dev_idx]->SetModeDescription((unsigned char *)data);
|
controllers[header.pkt_dev_idx]->SetModeDescription((unsigned char *)data);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue