diff --git a/ChangeLog b/ChangeLog index 49691359f5..82beb084a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Wed Oct 2 21:38:30 2013 Yusuke Endoh + + * 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 * 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++;