Fixing memory leak triggered by new MAC address logging.

This commit is contained in:
Robin Sommer 2016-06-07 11:45:26 -07:00
parent b2371752e4
commit 351014f48a
5 changed files with 12 additions and 9 deletions

View file

@ -1,4 +1,9 @@
2.4-597 | 2016-06-07 11:46:45 -0700
* Fixing memory leak triggered by new MAC address logging. (Robin
Sommer)
2.4-596 | 2016-06-07 11:07:29 -0700 2.4-596 | 2016-06-07 11:07:29 -0700
* Don't create debug.log immediately upon startup (BIT-1616). * Don't create debug.log immediately upon startup (BIT-1616).

View file

@ -1 +1 @@
2.4-596 2.4-597

View file

@ -237,7 +237,7 @@ flow DHCP_Flow(is_orig: bool) {
Unref(dhcp_msg_val_); Unref(dhcp_msg_val_);
const char* mac_str = fmt_mac(${msg.chaddr}.data(), ${msg.chaddr}.length()); std::string mac_str = fmt_mac(${msg.chaddr}.data(), ${msg.chaddr}.length());
RecordVal* r = new RecordVal(dhcp_msg); RecordVal* r = new RecordVal(dhcp_msg);
r->Assign(0, new Val(${msg.op}, TYPE_COUNT)); r->Assign(0, new Val(${msg.op}, TYPE_COUNT));
@ -247,8 +247,6 @@ flow DHCP_Flow(is_orig: bool) {
r->Assign(4, new AddrVal(${msg.ciaddr})); r->Assign(4, new AddrVal(${msg.ciaddr}));
r->Assign(5, new AddrVal(${msg.yiaddr})); r->Assign(5, new AddrVal(${msg.yiaddr}));
delete [] mac_str;
dhcp_msg_val_ = r; dhcp_msg_val_ = r;
switch ( ${msg.op} ) switch ( ${msg.op} )

View file

@ -148,9 +148,9 @@ const char* fmt_conn_id(const uint32* src_addr, uint32 src_port,
return fmt_conn_id(src, src_port, dst, dst_port); return fmt_conn_id(src, src_port, dst, dst_port);
} }
char* fmt_mac(const unsigned char* m, int len) std::string fmt_mac(const unsigned char* m, int len)
{ {
char* buf = new char[25]; static char buf[25];
if ( len < 8 && len != 6 ) if ( len < 8 && len != 6 )
{ {
@ -159,10 +159,10 @@ char* fmt_mac(const unsigned char* m, int len)
} }
if ( (len == 6) || (m[6] == 0 && m[7] == 0) ) // EUI-48 if ( (len == 6) || (m[6] == 0 && m[7] == 0) ) // EUI-48
snprintf(buf, 19, "%02x:%02x:%02x:%02x:%02x:%02x", snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x",
m[0], m[1], m[2], m[3], m[4], m[5]); m[0], m[1], m[2], m[3], m[4], m[5]);
else else
snprintf(buf, 25, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7]); m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7]);
return buf; return buf;

View file

@ -166,7 +166,7 @@ extern const char* fmt_conn_id(const uint32* src_addr, uint32 src_port,
* least 8 for a valid address. * least 8 for a valid address.
* @return A string of the formatted MAC. Passes ownership to caller. * @return A string of the formatted MAC. Passes ownership to caller.
*/ */
extern char* fmt_mac(const unsigned char* m, int len); extern std::string fmt_mac(const unsigned char* m, int len);
// Read 4 bytes from data and return in network order. // Read 4 bytes from data and return in network order.
extern uint32 extract_uint32(const u_char* data); extern uint32 extract_uint32(const u_char* data);