summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--ext/socket/ifaddr.c4
2 files changed, 12 insertions, 0 deletions
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 <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++;