indeyets                Sat Sep  6 07:57:22 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src    NEWS 
    /php-src/ext/snmp   snmp.c 
  Log:
  Fixed bug #45405 (snmp extension memory leak)
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.306&r2=1.2027.2.547.2.965.2.307&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.306 
php-src/NEWS:1.2027.2.547.2.965.2.307
--- php-src/NEWS:1.2027.2.547.2.965.2.306       Tue Sep  2 08:58:18 2008
+++ php-src/NEWS        Sat Sep  6 07:57:21 2008
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 200?, PHP 5.3.0 Alpha 3
+- Fixed bug #45405 (snmp extension memory leak). (Federico Cuello, Rodrigo
+  Campos)
 
 02 Sep 2008, PHP 5.3.0 Alpha 2
 - Removed special treatment of "/tmp" in sessions for open_basedir.
http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/snmp.c?r1=1.106.2.2.2.5.2.5&r2=1.106.2.2.2.5.2.6&diff_format=u
Index: php-src/ext/snmp/snmp.c
diff -u php-src/ext/snmp/snmp.c:1.106.2.2.2.5.2.5 
php-src/ext/snmp/snmp.c:1.106.2.2.2.5.2.6
--- php-src/ext/snmp/snmp.c:1.106.2.2.2.5.2.5   Wed Aug 13 14:06:21 2008
+++ php-src/ext/snmp/snmp.c     Sat Sep  6 07:57:22 2008
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: snmp.c,v 1.106.2.2.2.5.2.5 2008/08/13 14:06:21 felipe Exp $ */
+/* $Id: snmp.c,v 1.106.2.2.2.5.2.6 2008/09/06 07:57:22 indeyets Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -627,13 +627,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);
@@ -644,6 +644,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;
                        }
@@ -677,11 +678,13 @@
                                                *return_value = *snmpval;
                                                zval_copy_ctor(return_value);
                                                zval_ptr_dtor(&snmpval);
+                                               snmp_free_pdu(pdu);
                                                snmp_close(ss);
                                                return;
                                        } else if (st == SNMP_CMD_GETNEXT) {
                                                *return_value = *snmpval;
                                                zval_copy_ctor(return_value);
+                                               snmp_free_pdu(pdu);
                                                snmp_close(ss);
                                                return;
                                        } else if (st == SNMP_CMD_WALK) {
@@ -720,23 +723,28 @@
                                        }
                                        if (st == SNMP_CMD_GET) {
                                                if ((pdu = 
snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) {
+                                                       snmp_free_pdu(pdu);
                                                        goto retry;
                                                }
                                        } else if (st == SNMP_CMD_SET) {
                                                if ((pdu = 
snmp_fix_pdu(response, SNMP_MSG_SET)) != NULL) {
+                                                       snmp_free_pdu(pdu);
                                                        goto retry;
                                                }
                                        } else if (st == SNMP_CMD_GETNEXT) {
                                                if ((pdu = 
snmp_fix_pdu(response, SNMP_MSG_GETNEXT)) != NULL) {
+                                                       snmp_free_pdu(pdu);
                                                        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(pdu);
                                                        goto retry;
                                                }
                                        }
+                                       snmp_free_pdu(pdu);
                                        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

Reply via email to