diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/sockets/multicast.c | 6 |
2 files changed, 9 insertions, 0 deletions
@@ -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}; |