diff --git a/netsnmp/client_intf.c b/netsnmp/client_intf.c index 7d58302..312fb48 100644 --- a/netsnmp/client_intf.c +++ b/netsnmp/client_intf.c @@ -1619,6 +1619,9 @@ netsnmp_get(PyObject *self, PyObject *args) vars && (varlist_ind < varlist_len); vars = vars->next_variable, varlist_ind++) { + if (err_ind >= 1 && varlist_ind >= err_ind - 1) + continue; + varbind = PySequence_GetItem(varlist, varlist_ind); if (PyObject_HasAttrString(varbind, "tag")) { diff --git a/netsnmp/tests/system/test_errors.py b/netsnmp/tests/system/test_errors.py index ea8376d..e6f53fa 100644 --- a/netsnmp/tests/system/test_errors.py +++ b/netsnmp/tests/system/test_errors.py @@ -13,6 +13,12 @@ def test_unknown_oid_returns_no_value(self): self.assertEqual(values, (None,)) self.assertIn(varbind.type, ('NOSUCHOBJECT', 'NOSUCHINSTANCE')) + def test_unknown_instance_returns_no_value(self): + varbind = netsnmp.Varbind(SYS_DESCR, '123') + + self.assertEqual(netsnmp.snmpget(varbind, **READ_ARGS), (None,)) + self.assertEqual(varbind.type, 'NOSUCHINSTANCE') + def test_read_only_set_is_rejected(self): session = netsnmp.Session(**READ_ARGS) varlist = netsnmp.VarList( diff --git a/netsnmp/tests/system/test_v1.py b/netsnmp/tests/system/test_v1.py index db8b338..686ae5d 100644 --- a/netsnmp/tests/system/test_v1.py +++ b/netsnmp/tests/system/test_v1.py @@ -24,6 +24,13 @@ def test_get(self): netsnmp.Varbind(SYS_DESCR, '0'), **V1_READ_ARGS) assert_value(self, values) + def test_get_unknown_instance_returns_no_value(self): + varbind = netsnmp.Varbind(SYS_DESCR, '123') + + self.assertEqual(netsnmp.snmpget(varbind, **V1_READ_ARGS), (None,)) + self.assertIsNone(varbind.val) + self.assertIsNone(varbind.type) + def test_getnext(self): values = netsnmp.snmpgetnext( netsnmp.Varbind(SYSTEM), **V1_READ_ARGS)