pyasn1
pyasn1 copied to clipboard
Fix. Decode Unsigned Values as Unsigned
Fix some issues in pysnmp
https://github.com/etingof/pysnmp/issues/190 https://github.com/etingof/pysnmp/issues/357 https://github.com/etingof/pysnmp/issues/384
Example for fast test:
from pyasn1.codec.ber import decoder
from pysnmp.hlapi import *
print(decoder.decode(bytes.fromhex('4104985D4B44'), Counter32()))
On the current master, it will fall into a ValueConstraintError:
pyasn1.type.error.ValueConstraintError: <ConstraintsIntersection object, consts <ValueRangeConstraint object, consts 0, 4294967295>> failed at: ValueConstraintError('<ValueRangeConstraint object, consts 0, 4294967295> failed at: ValueConstraintError(-1738716348)') at Counter32
And after correction it is correctly decoded:
(<Counter32 value object, tagSet <TagSet object, tags 64:0:1>, subtypeSpec <ConstraintsIntersection object, consts <ValueRangeConstraint object, consts 0, 4294967295>>, payload [2556250948]>, b'')
The value that you decode in the example - '4104985D4B44': leaving the type(41) and the len(04) aside the highest bit of the actual value (985D4B44) is 1. Doesn't that require to handle it as a 2s-complement? because Snmp uses ASN.1/BER and ASN.1 knows signed integer only? In that case the exception would be correct because the server actually used an incorrect encoding and sent a negative number (that's at least my current understanding, also https://pysnmp.readthedocs.io/en/latest/faq/ignored-snmp-packets.html).
Based on which RFC or standard do you now change that behavior?
BR, Gerhard.
This behavior is wrong, I'll try to refer to the answer of another person who has already answered quite fully
Since the ecosystem moved away from here, you should send your pull request to https://github.com/pyasn1/pyasn1.