--- agent/agent_index.c.orig 2012-11-15 10:50:04.000000000 -0500 +++ agent/agent_index.c 2012-11-15 10:52:59.000000000 -0500 @@ -528,9 +528,30 @@ for (idxptr2 = idxptr; idxptr2 != NULL; prev_idx_ptr = idxptr2, idxptr2 = idxptr2->next_idx) { - i = SNMP_MIN(varbind->val_len, idxptr2->varbind->val_len); - res2 = - memcmp(varbind->val.string, idxptr2->varbind->val.string, i); + switch (varbind->type) { + case ASN_INTEGER: + res2 = + (*varbind->val.integer - + *idxptr2->varbind->val.integer); + break; + case ASN_OCTET_STR: + i = SNMP_MIN(varbind->val_len, + idxptr2->varbind->val_len); + res2 = + memcmp(varbind->val.string, + idxptr2->varbind->val.string, i); + break; + case ASN_OBJECT_ID: + res2 = + snmp_oid_compare(varbind->val.objid, + varbind->val_len / sizeof(oid), + idxptr2->varbind->val.objid, + idxptr2->varbind->val_len / + sizeof(oid)); + break; + default: + return INDEX_ERR_WRONG_TYPE; /* wrong type */ + } if (res2 <= 0) break; }