commit bec6243394ed78897c14e3fa46f934e0ea3d453e Author: Jan Safranek Date: Fri Jun 26 13:30:07 2015 +0200 snmpstatus: CHANGES: Fixed crash when receiving non-standard compliant responses. Some HW sends ifOperStatus as NULL instead of INTEGER type. We should not try to dereference this NULL. diff --git a/apps/snmpstatus.c b/apps/snmpstatus.c index ae08369..6f31c42 100644 --- a/apps/snmpstatus.c +++ b/apps/snmpstatus.c @@ -310,30 +310,38 @@ main(int argc, char *argv[]) continue; } if (vars->name_length >= length_ifOperStatus - && !memcmp(objid_ifOperStatus, vars->name, - sizeof(objid_ifOperStatus))) { + && !memcmp(objid_ifOperStatus, vars->name, + sizeof(objid_ifOperStatus)) + && vars->type == ASN_INTEGER + && vars->val.integer) { if (*vars->val.integer != MIB_IFSTATUS_UP) down_interfaces++; snmp_add_null_var(pdu, vars->name, vars->name_length); good_var++; - } else if (vars->name_length >= length_ifInUCastPkts && - !memcmp(objid_ifInUCastPkts, vars->name, - sizeof(objid_ifInUCastPkts))) { + } else if (vars->name_length >= length_ifInUCastPkts + &&!memcmp(objid_ifInUCastPkts, vars->name, + sizeof(objid_ifInUCastPkts)) + && vars->type == ASN_COUNTER + && vars->val.integer) { ipackets += *vars->val.integer; snmp_add_null_var(pdu, vars->name, vars->name_length); good_var++; } else if (vars->name_length >= length_ifInNUCastPkts && !memcmp(objid_ifInNUCastPkts, vars->name, - sizeof(objid_ifInNUCastPkts))) { + sizeof(objid_ifInNUCastPkts)) + && vars->type == ASN_COUNTER + && vars->val.integer) { ipackets += *vars->val.integer; snmp_add_null_var(pdu, vars->name, vars->name_length); good_var++; } else if (vars->name_length >= length_ifOutUCastPkts && !memcmp(objid_ifOutUCastPkts, vars->name, - sizeof(objid_ifOutUCastPkts))) { + sizeof(objid_ifOutUCastPkts)) + && vars->type == ASN_COUNTER + && vars->val.integer) { opackets += *vars->val.integer; snmp_add_null_var(pdu, vars->name, vars->name_length); @@ -341,7 +349,9 @@ main(int argc, char *argv[]) } else if (vars->name_length >= length_ifOutNUCastPkts && !memcmp(objid_ifOutNUCastPkts, vars->name, - sizeof(objid_ifOutNUCastPkts))) { + sizeof(objid_ifOutNUCastPkts)) + && vars->type == ASN_COUNTER + && vars->val.integer) { opackets += *vars->val.integer; snmp_add_null_var(pdu, vars->name, vars->name_length);