X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=blobdiff_plain;f=pyderasn.py;h=5597563c07964e7c90a6252138f990c23bef1591;hp=5adc5b068d17915f0c543144b66557b9fc355f30;hb=333d098f0af80eae5481c99b86419d25ea927d22;hpb=14d3cda5d5ff2286d5b288ee376102371746f66f diff --git a/pyderasn.py b/pyderasn.py index 5adc5b0..5597563 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -687,7 +687,7 @@ except ImportError: # pragma: no cover def colored(what, *args, **kwargs): return what -__version__ = "6.0" +__version__ = "6.1" __all__ = ( "Any", @@ -3420,6 +3420,13 @@ ObjectIdentifierState = namedtuple("ObjectIdentifierState", ( )) +def pureint(value): + i = int(value) + if (value[0] in "+- ") or (value[-1] == " "): + raise ValueError("non-pure integer") + return i + + class ObjectIdentifier(Obj): """``OBJECT IDENTIFIER`` OID type @@ -3497,7 +3504,7 @@ class ObjectIdentifier(Obj): return value._value if isinstance(value, string_types): try: - value = tuple(int(arc) for arc in value.split(".")) + value = tuple(pureint(arc) for arc in value.split(".")) except ValueError: raise InvalidOID("unacceptable arcs values") if isinstance(value, tuple): @@ -3511,6 +3518,8 @@ class ObjectIdentifier(Obj): pass else: raise InvalidOID("unacceptable first arc value") + if not all(arc >= 0 for arc in value): + raise InvalidOID("negative arc value") return value raise InvalidValueType((self.__class__, str, tuple))