diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 22eb6525f8e0..afbdda285ec4 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -910,6 +910,7 @@ static bool netsnmp_session_init(php_snmp_session **session_p, int version, zend if (strlen(session->peername) == 0) { php_error_docref(NULL, E_WARNING, "Unknown failure while resolving '%s'", ZSTR_VAL(hostname)); + php_network_freeaddresses(psal); return false; } /* XXX FIXME diff --git a/ext/snmp/tests/snmp_resolve_fail_leak.phpt b/ext/snmp/tests/snmp_resolve_fail_leak.phpt new file mode 100644 index 000000000000..c8793b09e928 --- /dev/null +++ b/ext/snmp/tests/snmp_resolve_fail_leak.phpt @@ -0,0 +1,16 @@ +--TEST-- +snmp: resolved address list is freed when peername resolution drains empty +--EXTENSIONS-- +snmp +--FILE-- + +--EXPECTF-- +Warning: snmpget(): Unknown failure while resolving '[127.0.0.1]' in %s on line %d +bool(false)