Skip to content

Commit ca044e7

Browse files
committed
fixed natneg memory leak
1 parent f38c0e0 commit ca044e7

1 file changed

Lines changed: 44 additions & 47 deletions

File tree

code/natneg/server/NNDriver.cpp

Lines changed: 44 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -55,55 +55,52 @@ namespace NN {
5555

5656
void *begin = buffer.GetReadCursor();
5757
buffer.ReadBuffer(&packet.magic, NATNEG_MAGIC_LEN);
58-
if(memcmp(&NNMagicData,&packet.magic, NATNEG_MAGIC_LEN) != 0) {
59-
//skip invalid packet
60-
return;
61-
}
62-
memset(&packet.Packet.Init, 0, sizeof(packet.Packet.Init));
63-
packet.version = buffer.ReadByte();
64-
packet.packettype = buffer.ReadByte();
65-
packet.cookie = buffer.ReadInt();
58+
if(memcmp(&NNMagicData,&packet.magic, NATNEG_MAGIC_LEN) == 0) { //valid natneg packet
59+
memset(&packet.Packet.Init, 0, sizeof(packet.Packet.Init));
60+
packet.version = buffer.ReadByte();
61+
packet.packettype = buffer.ReadByte();
62+
packet.cookie = buffer.ReadInt();
6663

67-
int packetSize = packetSizeFromType(packet.packettype, packet.version);
68-
std::string gamename;
64+
int packetSize = packetSizeFromType(packet.packettype, packet.version);
65+
std::string gamename;
6966

70-
71-
size_t new_pos = 0;
72-
switch(packet.packettype) {
73-
case NN_INIT:
74-
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
75-
if(packet.version > 1) {
76-
gamename = buffer.ReadNTS();
77-
}
78-
driver->handle_init_packet(address, &packet, gamename);
79-
break;
80-
case NN_CONNECT_ACK:
81-
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
82-
driver->handle_connect_ack_packet(address, &packet);
83-
break;
84-
case NN_ADDRESS_CHECK:
85-
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
86-
new_pos = ((size_t)begin-(size_t)buffer.GetHead());
87-
new_pos += sizeof(packet);
88-
buffer.SetReadCursor(new_pos);
89-
driver->handle_address_check_packet(address, &packet);
90-
break;
91-
case NN_REPORT:
92-
buffer.ReadBuffer(&packet.Packet.Report, packetSize);
93-
driver->handle_report_packet(address, &packet);
94-
break;
95-
case NN_NATIFY_REQUEST:
96-
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
97-
new_pos = ((size_t)begin-(size_t)buffer.GetHead());
98-
new_pos += sizeof(packet);
99-
buffer.SetReadCursor(new_pos);
100-
driver->handle_natify_packet(address, &packet);
101-
break;
102-
case NN_ERTACK:
103-
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
104-
driver->handle_ert_ack_packet(address, &packet);
105-
break;
106-
}
67+
size_t new_pos = 0;
68+
switch(packet.packettype) {
69+
case NN_INIT:
70+
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
71+
if(packet.version > 1) {
72+
gamename = buffer.ReadNTS();
73+
}
74+
driver->handle_init_packet(address, &packet, gamename);
75+
break;
76+
case NN_CONNECT_ACK:
77+
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
78+
driver->handle_connect_ack_packet(address, &packet);
79+
break;
80+
case NN_ADDRESS_CHECK:
81+
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
82+
new_pos = ((size_t)begin-(size_t)buffer.GetHead());
83+
new_pos += sizeof(packet);
84+
buffer.SetReadCursor(new_pos);
85+
driver->handle_address_check_packet(address, &packet);
86+
break;
87+
case NN_REPORT:
88+
buffer.ReadBuffer(&packet.Packet.Report, packetSize);
89+
driver->handle_report_packet(address, &packet);
90+
break;
91+
case NN_NATIFY_REQUEST:
92+
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
93+
new_pos = ((size_t)begin-(size_t)buffer.GetHead());
94+
new_pos += sizeof(packet);
95+
buffer.SetReadCursor(new_pos);
96+
driver->handle_natify_packet(address, &packet);
97+
break;
98+
case NN_ERTACK:
99+
buffer.ReadBuffer(&packet.Packet.Init, packetSize);
100+
driver->handle_ert_ack_packet(address, &packet);
101+
break;
102+
}
103+
}
107104
}
108105
if(buf && buf->base) {
109106
free((void *)buf->base);

0 commit comments

Comments
 (0)