Commit a1754089 authored by Pavel Vainerman's avatar Pavel Vainerman

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

UDPPacket в UDPMessage
parent f79235a9
......@@ -169,20 +169,29 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p )
// копируем аналоговые данные
size_t sz = m.acount*sizeof(UDPAData);
memcpy(m.a_dat,&(p.data[i]),sz);
if( sz > sizeof(m.a_dat) )
sz = sizeof(m.a_dat);
memcpy(m.a_dat,&(p.data[i]),sz);
i += sz;
// копируем булевые индексы
sz = m.dcount*sizeof(long);
memcpy(m.d_id,&(p.data[i]),sz);
if( sz > sizeof(m.d_id) )
sz = sizeof(m.d_id);
memcpy(m.d_id,&(p.data[i]),sz);
i += sz;
// копируем булевые данные
size_t nbyte = m.dcount / sizeof(unsigned char);
size_t nbit = m.dcount % sizeof(unsigned char);
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);
return i+sz;
return i+sz;
}
// -----------------------------------------------------------------------------
......@@ -267,7 +267,7 @@ int main(int argc, char* argv[])
mypack.addAData(d);
}
for( int i=0; i < count; i++ )
for( unsigned int i=0; i < count; i++ )
mypack.addDData(i,i);
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