Commit f6b78bc4 authored by Pavel Vainerman's avatar Pavel Vainerman

(unet2): Добавил проверку выхода за границы массива в преобразовании UDPPacket в UDPMessage

parent 2165dda8
...@@ -169,11 +169,17 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p ) ...@@ -169,11 +169,17 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p )
// копируем аналоговые данные // копируем аналоговые данные
size_t sz = m.acount*sizeof(UDPAData); size_t sz = m.acount*sizeof(UDPAData);
if( sz > sizeof(m.a_dat) )
sz = sizeof(m.a_dat);
memcpy(m.a_dat,&(p.data[i]),sz); memcpy(m.a_dat,&(p.data[i]),sz);
i += sz; i += sz;
// копируем булевые индексы // копируем булевые индексы
sz = m.dcount*sizeof(long); sz = m.dcount*sizeof(long);
if( sz > sizeof(m.d_id) )
sz = sizeof(m.d_id);
memcpy(m.d_id,&(p.data[i]),sz); memcpy(m.d_id,&(p.data[i]),sz);
i += sz; i += sz;
...@@ -181,6 +187,9 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p ) ...@@ -181,6 +187,9 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p )
size_t nbyte = m.dcount / sizeof(unsigned char); size_t nbyte = m.dcount / sizeof(unsigned char);
size_t nbit = m.dcount % sizeof(unsigned char); size_t nbit = m.dcount % sizeof(unsigned char);
sz = nbit > 0 ? nbyte + 1 : nbyte; sz = nbit > 0 ? nbyte + 1 : nbyte;
if( sz > sizeof(m.d_dat) )
sz = sizeof(m.d_dat);
memcpy(m.d_dat,&(p.data[i]),sz); memcpy(m.d_dat,&(p.data[i]),sz);
return i+sz; return i+sz;
......
...@@ -267,7 +267,7 @@ int main(int argc, char* argv[]) ...@@ -267,7 +267,7 @@ int main(int argc, char* argv[])
mypack.addAData(d); mypack.addAData(d);
} }
for( int i=0; i < count; i++ ) for( unsigned int i=0; i < count; i++ )
mypack.addDData(i,i); mypack.addDData(i,i);
udp->setPeer(host,port); udp->setPeer(host,port);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment