From 09bb7569f40adf57af93413d8a1e4ec4407e4a4d Mon Sep 17 00:00:00 2001 From: RElesgoe <xboi209@gmail.com> Date: Tue, 23 Aug 2016 20:22:38 -0700 Subject: [PATCH] Fix memory leak in apireg_send() when returning without calling packet_del_ref() on variable 'p' --- src/bnetd/handle_apireg.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bnetd/handle_apireg.cpp b/src/bnetd/handle_apireg.cpp index 0f51c23..bbe536c 100644 --- a/src/bnetd/handle_apireg.cpp +++ b/src/bnetd/handle_apireg.cpp @@ -455,13 +455,10 @@ namespace pvpgn static int apireg_send(t_connection * conn, char const * command) { - t_packet * p; char data[MAX_IRC_MESSAGE_LEN + 1]; unsigned len = 0; t_elem * curr; - p = packet_create(packet_class_raw); - if (command) len = (std::strlen(command)); @@ -473,11 +470,14 @@ namespace pvpgn std::sprintf(data, "%s", command); } - packet_set_size(p, 0); - packet_append_data(p, data, len); - DEBUG2("[{}] sent \"{}\"", conn_get_socket(conn), data); - conn_push_outqueue(conn, p); - packet_del_ref(p); + { + t_packet* const p = packet_create(packet_class_raw); + packet_set_size(p, 0); + packet_append_data(p, data, len); + DEBUG2("[{}] sent \"{}\"", conn_get_socket(conn), data); + conn_push_outqueue(conn, p); + packet_del_ref(p); + } /* In apiregister server we must destroy apiregmember and connection after send packet */