summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--ext/sockets/multicast.c6
2 files changed, 9 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index c136831a29..fd6ca50730 100644
--- a/NEWS
+++ b/NEWS
@@ -38,6 +38,9 @@ PHP NEWS
. Fixed bug #75245 (Don't set content of elements with only whitespaces).
(eriklundin)
+- Sockets:
+ . Fixed bug #78665 (Multicasting may leak memory). (cmb)
+
- Standard:
. Fixed bug #76859 (stream_get_line skips data if used with data-generating
filter). (kkopachev)
diff --git a/ext/sockets/multicast.c b/ext/sockets/multicast.c
index 481bf94f8c..c6aa9f0c78 100644
--- a/ext/sockets/multicast.c
+++ b/ext/sockets/multicast.c
@@ -648,6 +648,7 @@ retry:
goto retry;
}
if (retval != NO_ERROR) {
+ efree(addr_table);
php_error_docref(NULL, E_WARNING,
"GetIpAddrTable failed with error %lu", retval);
return FAILURE;
@@ -656,9 +657,11 @@ retry:
MIB_IPADDRROW r = addr_table->table[i];
if (r.dwIndex == if_index) {
out_addr->s_addr = r.dwAddr;
+ efree(addr_table);
return SUCCESS;
}
}
+ efree(addr_table);
php_error_docref(NULL, E_WARNING,
"No interface with index %u was found", if_index);
return FAILURE;
@@ -688,6 +691,7 @@ retry:
goto retry;
}
if (retval != NO_ERROR) {
+ efree(addr_table);
php_error_docref(NULL, E_WARNING,
"GetIpAddrTable failed with error %lu", retval);
return FAILURE;
@@ -696,9 +700,11 @@ retry:
MIB_IPADDRROW r = addr_table->table[i];
if (r.dwAddr == addr->s_addr) {
*if_index = r.dwIndex;
+ efree(addr_table);
return SUCCESS;
}
}
+ efree(addr_table);
{
char addr_str[17] = {0};