pyasn1 icon indicating copy to clipboard operation
pyasn1 copied to clipboard

Fix. Decode Unsigned Values as Unsigned

Open nigredon1991 opened this issue 2 years ago • 3 comments

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'')

nigredon1991 avatar Sep 20 '22 06:09 nigredon1991

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.

Gerhardzz avatar Jul 04 '23 13:07 Gerhardzz

This behavior is wrong, I'll try to refer to the answer of another person who has already answered quite fully

nigredon1991 avatar Jul 05 '23 14:07 nigredon1991

Since the ecosystem moved away from here, you should send your pull request to https://github.com/pyasn1/pyasn1.

lextm avatar Feb 11 '24 02:02 lextm