php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #48359 [PATCH] Script hangs on snmprealwalk if OID is not increasing
Submitted: 2009-05-22 04:36 UTC Modified: 2009-05-31 14:12 UTC
From: simonov at gmail dot com Assigned:
Status: Closed Package: SNMP related
PHP Version: 5.2.9 OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: simonov at gmail dot com
New email:
PHP Version: OS:

 

 [2009-05-22 04:36 UTC] simonov at gmail dot com
Description:
------------
snmprealwalk function gets into indefinite loop if OID is not 
increasing, so script hangs.

The following change corrects the problem:
--- snmp.c.orig	2009-05-22 10:12:14.000000000 +0600
+++ snmp.c	2009-05-22 10:17:58.000000000 +0600
@@ -490,9 +490,16 @@
 					if (st >= SNMP_CMD_WALK && st 
!= SNMP_CMD_SET) {
 						if (vars->type != 
SNMP_ENDOFMIBVIEW && 
 							vars->type != 
SNMP_NOSUCHOBJECT && vars->type != SNMP_NOSUCHINSTANCE) {
-							memmove((char 
*)name, (char *)vars->name,vars->name_length * sizeof(oid));
-							name_length = 
vars->name_length;
-							keepwalking = 
1;
+							if 
(snmp_oid_compare(name, name_length,
+									
vars->name,
+									
vars->name_length) >= 0) {
+								
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error: OID not 
increasing: %s",name);
+								
keepwalking = 0;
+							} else {
+								
memmove((char *)name, (char *)vars->name,vars->name_length * 
sizeof(oid));
+								
name_length = vars->name_length;
+								
keepwalking = 1;
+							}
 						}
 					}
 				}	


Reproduce code:
---------------
$temp_array = @snmprealwalk("$hostname:$port", "$community", "$oid", ($timeout * 1000), $retries);

Expected result:
----------------
(snip from tcpdump):
10:19:10.392849 IP 3.3.3.3.161 > 1.1.1.1.50706:  GetResponse(34)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1=2
10:19:10.392908 IP 1.1.1.1.50706 > 3.3.3.3.161:  GetNextRequest(33)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1
10:19:10.422741 IP 3.3.3.3.161 > 1.1.1.1.50706:  GetResponse(34)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1=1
10:19:10.444217 IP 1.1.1.1.58395 > 3.3.3.3.161:  GetRequest(28)  
.1.3.6.1.2.1.1.3.0

Actual result:
--------------
Indefinite cycle (snip from tcpdump):
10:00:34.955679 IP 3.3.3.3.161 > 1.1.1.1.51705:  GetResponse(34)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1=1
10:00:34.955787 IP 1.1.1.1.51705 > 3.3.3.3.161:  GetNextRequest(33)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1
10:00:34.985357 IP 3.3.3.3.161 > 1.1.1.1.51705:  GetResponse(34)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1=1
10:00:34.985452 IP 1.1.1.1.51705 > 3.3.3.3.161:  GetNextRequest(33)  
.1.3.6.1.2.1.4.20.1.2.127.0.0.1


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-05-22 04:41 UTC] simonov at gmail dot com
Patch without formatting issues:
http://cl1p.net/phpsnmpoidincreasing/
 [2009-05-22 04:43 UTC] simonov at gmail dot com
This problem applies to php for every OS.
 [2009-05-31 14:12 UTC] iliaa@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 16:01:28 2024 UTC