Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IndexError: list index out of range #98

Open
ishanasse opened this issue Dec 9, 2021 · 0 comments
Open

IndexError: list index out of range #98

ishanasse opened this issue Dec 9, 2021 · 0 comments
Labels

Comments

@ishanasse
Copy link

ishanasse commented Dec 9, 2021

Issue Description:

Execution is hitting a Python exception when corrupt SNMP data is received.
Is it possible to make it defensive here? This isn't happening frequently so I am unable to regenerate it.

Trace:

Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: Traceback (most recent call last):
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/lib/preseem/netpoll/snmp_client.py", line 241, in snmp_walk2
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: async for x in rows:
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/aio/api/raw.py", line 216, in walk
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: async for varbind in gen:
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/aio/api/raw.py", line 265, in multiwalk
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: varbinds = await fetcher(
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/aio/api/raw.py", line 164, in multigetnext
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: Sequence.from_bytes(response)
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/x690/types.py", line 169, in from_bytes
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: return cls.decode(data)
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/x690/types.py", line 382, in decode
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: value, data = pop_tlv(data)
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/x690/types.py", line 117, in pop_tlv
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: value = cls.from_bytes(chunk)
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/x690/types.py", line 169, in from_bytes
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: return cls.decode(data)
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/pdu.py", line 222, in decode
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: return super(GetResponse, cls).decode(data)
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: File "/usr/local/lib/python3.9/site-packages/puresnmp/pdu.py", line 74, in decode
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: offending_oid = varbinds[error_index.value-1].oid
Dec 08 19:20:34 preseem-5000-ks preseem-network-poller[878059]: IndexError: list index out of range

Code Snippet: /puresnmp/pdu.py

 63         if error_status.value:
 64             error_detail, data = cast(
 65                 Tuple[Iterable[Tuple[ObjectIdentifier, int]], bytes],
 66                 pop_tlv(data)
 67             )
 68             if not isinstance(error_detail, Sequence):
 69                 raise TypeError(
 70                     'error-detail should be a sequence but got %r' %
 71                     type(error_detail))
 72             varbinds = [VarBind(*raw_varbind) for raw_varbind in error_detail]
 73             if error_index.value != 0:
 74                 offending_oid = varbinds[error_index.value-1].oid
 75             else:
 76                 # Offending OID is unknown
 77                 offending_oid = None
 78             assert data == b''
 79             exception = ErrorResponse.construct(
 80                 error_status.value, offending_oid)
 81             raise exception
@exhuma exhuma added the v1.x label May 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants