diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-07-13 16:12:56 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-07-13 16:12:56 +0200 |
commit | 59e9058972de79673ad273c914fe82bf11660386 (patch) | |
tree | 9511bf1879b98bda096f22e954d9a9515e52b954 /pysnmp/proto | |
parent | 1cb1b5d3ab410b12c991cb2ff3c7d940ae67a9f6 (diff) | |
download | pysnmp-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.py | 8 | ||||
-rw-r--r-- | pysnmp/proto/mpmod/rfc3412.py | 9 | ||||
-rw-r--r-- | pysnmp/proto/rfc3412.py | 8 | ||||
-rw-r--r-- | pysnmp/proto/secmod/rfc3414/service.py | 16 |
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( |