diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | ext/socket/ifaddr.c | 4 |
2 files changed, 12 insertions, 0 deletions
@@ -1,3 +1,11 @@ +Wed Oct 2 21:38:30 2013 Yusuke Endoh <mame@tsg.ne.jp> + + * ext/socket/ifaddr.c (rsock_getifaddrs): fix possible memory leak. + When a system had no interface, this function used xmalloc for root + but did not return any reference to it. This patch fixes it by + immediately returning an empty array if no interface is found. + Coverity Scan found this bug. + Wed Oct 2 21:37:04 2013 Yusuke Endoh <mame@tsg.ne.jp> * random.c (make_seed_value): a local array declaration was accessed diff --git a/ext/socket/ifaddr.c b/ext/socket/ifaddr.c index 5783dfc869..16cd47be5a 100644 --- a/ext/socket/ifaddr.c +++ b/ext/socket/ifaddr.c @@ -105,6 +105,10 @@ rsock_getifaddrs(void) if (ret == -1) rb_sys_fail("getifaddrs"); + if (!ifaddrs) { + return rb_ary_new(); + } + numifaddrs = 0; for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) numifaddrs++; |