indeyets Sat Sep 6 08:18:38 2008 UTC
Modified files: (Branch: PHP_5_2)
/php-src NEWS
/php-src/ext/snmp snmp.c
Log:
MFB: Fixed bug #45405 (snmp extension memory leak)
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.1212&r2=1.2027.2.547.2.1213&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.1212 php-src/NEWS:1.2027.2.547.2.1213
--- php-src/NEWS:1.2027.2.547.2.1212 Tue Sep 2 13:21:59 2008
+++ php-src/NEWS Sat Sep 6 08:18:37 2008
@@ -19,6 +19,8 @@
- Fixed a crash on invalid method in ReflectionParameter constructor.
(Christian Seiler)
+- Fixed bug #45405 (snmp extension memory leak). (Federico Cuello, Rodrigo
+ Campos)
- Fixed bug #45956 (parse_ini_file() does not return false with syntax errors
in parsed file). (Jani)
- Fixed bug #45862 (get_class_vars is inconsistent with 'protected' and
http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/snmp.c?r1=1.106.2.2.2.6&r2=1.106.2.2.2.7&diff_format=u
Index: php-src/ext/snmp/snmp.c
diff -u php-src/ext/snmp/snmp.c:1.106.2.2.2.6
php-src/ext/snmp/snmp.c:1.106.2.2.2.7
--- php-src/ext/snmp/snmp.c:1.106.2.2.2.6 Mon Dec 31 07:20:11 2007
+++ php-src/ext/snmp/snmp.c Sat Sep 6 08:18:38 2008
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: snmp.c,v 1.106.2.2.2.6 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: snmp.c,v 1.106.2.2.2.7 2008/09/06 08:18:38 indeyets Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -417,13 +417,13 @@
while (keepwalking) {
keepwalking = 0;
if ((st == SNMP_CMD_GET) || (st == SNMP_CMD_GETNEXT)) {
- pdu = snmp_pdu_create((st == SNMP_CMD_GET) ?
SNMP_MSG_GET : SNMP_MSG_GETNEXT);
name_length = MAX_OID_LEN;
if (!snmp_parse_oid(objid, name, &name_length)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Invalid object identifier: %s", objid);
snmp_close(ss);
RETURN_FALSE;
}
+ pdu = snmp_pdu_create((st == SNMP_CMD_GET) ?
SNMP_MSG_GET : SNMP_MSG_GETNEXT);
snmp_add_null_var(pdu, name, name_length);
} else if (st == SNMP_CMD_SET) {
pdu = snmp_pdu_create(SNMP_MSG_SET);
@@ -434,6 +434,7 @@
sprint_objid(buf, name, name_length);
#endif
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Could not add variable: %s %c %s", buf, type, value);
+ snmp_free_pdu(pdu);
snmp_close(ss);
RETURN_FALSE;
}
@@ -467,11 +468,13 @@
*return_value = *snmpval;
zval_copy_ctor(return_value);
zval_ptr_dtor(&snmpval);
+ snmp_free_pdu(response);
snmp_close(ss);
return;
} else if (st == SNMP_CMD_GETNEXT) {
*return_value = *snmpval;
zval_copy_ctor(return_value);
+ snmp_free_pdu(response);
snmp_close(ss);
return;
} else if (st == SNMP_CMD_WALK) {
@@ -510,23 +513,28 @@
}
if (st == SNMP_CMD_GET) {
if ((pdu =
snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
} else if (st == SNMP_CMD_SET) {
if ((pdu =
snmp_fix_pdu(response, SNMP_MSG_SET)) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
} else if (st == SNMP_CMD_GETNEXT) {
if ((pdu =
snmp_fix_pdu(response, SNMP_MSG_GETNEXT)) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
} else if (st >= SNMP_CMD_WALK) { /*
Here we do walks. */
if ((pdu =
snmp_fix_pdu(response, ((session->version == SNMP_VERSION_1)
? SNMP_MSG_GETNEXT
: SNMP_MSG_GETBULK))) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
}
+ snmp_free_pdu(response);
snmp_close(ss);
if (st == SNMP_CMD_WALK || st ==
SNMP_CMD_REALWALK) {
zval_dtor(return_value);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php