From 25c369d4cfe7b4be546b4504a71105aeeda989f3 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Tue, 22 Sep 2015 14:51:38 +0800 Subject: [PATCH] unix: fix memory leak in uv_interface_addresses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/libuv/libuv/pull/537 Reviewed-By: Saúl Ibarra Corretgé --- src/unix/darwin.c | 4 +++- src/unix/freebsd.c | 4 +++- src/unix/linux-core.c | 4 +++- src/unix/netbsd.c | 4 +++- src/unix/openbsd.c | 4 +++- src/unix/sunos.c | 4 +++- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/unix/darwin.c b/src/unix/darwin.c index dab6ca99..cf95da21 100644 --- a/src/unix/darwin.c +++ b/src/unix/darwin.c @@ -258,8 +258,10 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { } *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) + if (!(*addresses)) { + freeifaddrs(addrs); return -ENOMEM; + } address = *addresses; diff --git a/src/unix/freebsd.c b/src/unix/freebsd.c index c69608b1..ddfd0f28 100644 --- a/src/unix/freebsd.c +++ b/src/unix/freebsd.c @@ -373,8 +373,10 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { } *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) + if (!(*addresses)) { + freeifaddrs(addrs); return -ENOMEM; + } address = *addresses; diff --git a/src/unix/linux-core.c b/src/unix/linux-core.c index e6e68283..3ff6fb15 100644 --- a/src/unix/linux-core.c +++ b/src/unix/linux-core.c @@ -814,8 +814,10 @@ int uv_interface_addresses(uv_interface_address_t** addresses, return 0; *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) + if (!(*addresses)) { + freeifaddrs(addrs); return -ENOMEM; + } address = *addresses; diff --git a/src/unix/netbsd.c b/src/unix/netbsd.c index 29f2a4de..ca48550f 100644 --- a/src/unix/netbsd.c +++ b/src/unix/netbsd.c @@ -298,8 +298,10 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) + if (!(*addresses)) { + freeifaddrs(addrs); return -ENOMEM; + } address = *addresses; diff --git a/src/unix/openbsd.c b/src/unix/openbsd.c index c8d54599..e6ca7a8b 100644 --- a/src/unix/openbsd.c +++ b/src/unix/openbsd.c @@ -313,8 +313,10 @@ int uv_interface_addresses(uv_interface_address_t** addresses, *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) + if (!(*addresses)) { + freeifaddrs(addrs); return -ENOMEM; + } address = *addresses; diff --git a/src/unix/sunos.c b/src/unix/sunos.c index 05b7a114..0c46817b 100644 --- a/src/unix/sunos.c +++ b/src/unix/sunos.c @@ -693,8 +693,10 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { } *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) + if (!(*addresses)) { + freeifaddrs(addrs); return -ENOMEM; + } address = *addresses;