From: Tony Crisci Date: Sat, 8 Mar 2014 04:56:25 +0000 (-0500) Subject: Bugfix: ipc_receive_message reply leak X-Git-Tag: 4.8~107^2^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a16dfdb15e2767d9753d45982b189de6edfdf70b;p=i3%2Fi3 Bugfix: ipc_receive_message reply leak The function ipc_recv_message in libi3 allocates memory to the location of the `message` reply in src/ipc_receive_message.c with malloc and must be freed. This memory leak was found using valgrind. --- diff --git a/src/ipc.c b/src/ipc.c index 4247ca5c..74edc741 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -833,14 +833,16 @@ handler_t handlers[8] = { static void ipc_receive_message(EV_P_ struct ev_io *w, int revents) { uint32_t message_type; uint32_t message_length; - uint8_t *message; + uint8_t *message = NULL; int ret = ipc_recv_message(w->fd, &message_type, &message_length, &message); /* EOF or other error */ if (ret < 0) { /* Was this a spurious read? See ev(3) */ - if (ret == -1 && errno == EAGAIN) + if (ret == -1 && errno == EAGAIN) { + FREE(message); return; + } /* If not, there was some kind of error. We don’t bother * and close the connection */ @@ -863,6 +865,7 @@ static void ipc_receive_message(EV_P_ struct ev_io *w, int revents) { ev_io_stop(EV_A_ w); free(w); + FREE(message); DLOG("IPC: client disconnected\n"); return; @@ -874,6 +877,8 @@ static void ipc_receive_message(EV_P_ struct ev_io *w, int revents) { handler_t h = handlers[message_type]; h(w->fd, message, 0, message_length, message_type); } + + FREE(message); } /*