summaryrefslogtreecommitdiff
path: root/pysnmp/proto
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-07-13 16:12:56 +0200
committerIlya Etingof <etingof@gmail.com>2017-07-13 16:12:56 +0200
commit59e9058972de79673ad273c914fe82bf11660386 (patch)
tree9511bf1879b98bda096f22e954d9a9515e52b954 /pysnmp/proto
parent1cb1b5d3ab410b12c991cb2ff3c7d940ae67a9f6 (diff)
downloadpysnmp-git-59e9058972de79673ad273c914fe82bf11660386.tar.gz
fixed a crash happening on incomplete inbound SNMP message
Diffstat (limited to 'pysnmp/proto')
-rw-r--r--pysnmp/proto/mpmod/rfc2576.py8
-rw-r--r--pysnmp/proto/mpmod/rfc3412.py9
-rw-r--r--pysnmp/proto/rfc3412.py8
-rw-r--r--pysnmp/proto/secmod/rfc3414/service.py16
4 files changed, 14 insertions, 27 deletions
diff --git a/pysnmp/proto/mpmod/rfc2576.py b/pysnmp/proto/mpmod/rfc2576.py
index 39442cff..1a0b3cf1 100644
--- a/pysnmp/proto/mpmod/rfc2576.py
+++ b/pysnmp/proto/mpmod/rfc2576.py
@@ -247,13 +247,7 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel):
mibBuilder = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
# rfc3412: 7.2.2
- try:
- msg, restOfWholeMsg = decoder.decode(wholeMsg, asn1Spec=self._snmpMsgSpec)
- except PyAsn1Error:
- debug.logger & debug.flagMP and debug.logger('prepareDataElements: %s' % (sys.exc_info()[1],))
- snmpInASNParseErrs, = mibBuilder.importSymbols('__SNMPv2-MIB', 'snmpInASNParseErrs')
- snmpInASNParseErrs.syntax += 1
- raise error.StatusInformation(errorIndication=errind.parseError)
+ msg, restOfWholeMsg = decoder.decode(wholeMsg, asn1Spec=self._snmpMsgSpec)
debug.logger & debug.flagMP and debug.logger('prepareDataElements: %s' % (msg.prettyPrint(),))
diff --git a/pysnmp/proto/mpmod/rfc3412.py b/pysnmp/proto/mpmod/rfc3412.py
index 9f60c57e..4636f779 100644
--- a/pysnmp/proto/mpmod/rfc3412.py
+++ b/pysnmp/proto/mpmod/rfc3412.py
@@ -469,14 +469,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
def prepareDataElements(self, snmpEngine, transportDomain,
transportAddress, wholeMsg):
# 7.2.2
- try:
- msg, restOfwholeMsg = decoder.decode(wholeMsg, asn1Spec=self._snmpMsgSpec)
-
- except PyAsn1Error:
- debug.logger & debug.flagMP and debug.logger('prepareDataElements: %s' % (sys.exc_info()[1],))
- snmpInASNParseErrs, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMPv2-MIB', 'snmpInASNParseErrs')
- snmpInASNParseErrs.syntax += 1
- raise error.StatusInformation(errorIndication=errind.parseError)
+ msg, restOfwholeMsg = decoder.decode(wholeMsg, asn1Spec=self._snmpMsgSpec)
debug.logger & debug.flagMP and debug.logger('prepareDataElements: %s' % (msg.prettyPrint(),))
diff --git a/pysnmp/proto/rfc3412.py b/pysnmp/proto/rfc3412.py
index d282279a..ad7d55f2 100644
--- a/pysnmp/proto/rfc3412.py
+++ b/pysnmp/proto/rfc3412.py
@@ -6,6 +6,7 @@
#
import sys
from pyasn1.compat.octets import null
+from pyasn1.error import PyAsn1Error
from pysnmp.smi import builder, instrum
from pysnmp.proto import errind, error, cache
from pysnmp.proto.api import verdec # XXX
@@ -344,6 +345,13 @@ class MsgAndPduDispatcher(object):
)
return restOfWholeMsg
+ except PyAsn1Error:
+ debug.logger & debug.flagMP and debug.logger('receiveMessage: %s' % (sys.exc_info()[1],))
+ snmpInASNParseErrs, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMPv2-MIB', 'snmpInASNParseErrs')
+ snmpInASNParseErrs.syntax += 1
+
+ return restOfWholeMsg
+
debug.logger & debug.flagDsp and debug.logger('receiveMessage: PDU %s' % PDU.prettyPrint())
# 4.2.2
diff --git a/pysnmp/proto/secmod/rfc3414/service.py b/pysnmp/proto/secmod/rfc3414/service.py
index d2ee6250..4d7500b4 100644
--- a/pysnmp/proto/secmod/rfc3414/service.py
+++ b/pysnmp/proto/secmod/rfc3414/service.py
@@ -543,16 +543,9 @@ class SnmpUSMSecurityModel(AbstractSecurityModel):
'processIncomingMsg: securityParameters %s' % debug.hexdump(securityParameters))
# 3.2.1
- try:
- securityParameters, rest = decoder.decode(
- securityParameters, asn1Spec=self.__securityParametersSpec
- )
-
- except PyAsn1Error:
- debug.logger & debug.flagSM and debug.logger('processIncomingMsg: %s' % (sys.exc_info()[1],))
- snmpInASNParseErrs, = mibBuilder.importSymbols('__SNMPv2-MIB', 'snmpInASNParseErrs')
- snmpInASNParseErrs.syntax += 1
- raise error.StatusInformation(errorIndication=errind.parseError)
+ securityParameters, rest = decoder.decode(
+ securityParameters, asn1Spec=self.__securityParametersSpec
+ )
debug.logger & debug.flagSM and debug.logger('processIncomingMsg: %s' % (securityParameters.prettyPrint(),))
@@ -936,8 +929,7 @@ class SnmpUSMSecurityModel(AbstractSecurityModel):
)
scopedPduSpec = scopedPduData.setComponentByPosition(0).getComponentByPosition(0)
try:
- scopedPDU, rest = decoder.decode(decryptedData,
- asn1Spec=scopedPduSpec)
+ scopedPDU, rest = decoder.decode(decryptedData, asn1Spec=scopedPduSpec)
except PyAsn1Error:
debug.logger & debug.flagSM and debug.logger(