]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - pyderasn.py
Check if tag's long form used in expected way
[pyderasn.git] / pyderasn.py
index bc5358a78cfa4e487efc99dd9db3f714bf0d20ea..505f3baafac8516084242256bb12f2633f02ace0 100755 (executable)
@@ -1201,7 +1201,7 @@ except ImportError:  # pragma: no cover
     def colored(what, *args, **kwargs):
         return what
 
-__version__ = "7.6"
+__version__ = "7.7"
 
 __all__ = (
     "agg_octet_string",
@@ -1558,6 +1558,10 @@ def tag_strip(data):
             raise DecodeError("unfinished tag")
         if indexbytes(data, i) & 0x80 == 0:
             break
+    if i == 1 and indexbytes(data, 1) < 0x1F:
+        raise DecodeError("unexpected long form")
+    if i > 1 and indexbytes(data, 1) & 0x7F == 0:
+        raise DecodeError("leading zero byte in tag value")
     i += 1
     return data[:i], i, data[i:]
 
@@ -5874,7 +5878,7 @@ class Any(Obj):
     def _value_sanitize(self, value):
         if value.__class__ == binary_type:
             if len(value) == 0:
-                raise ValueError("Any value can not be empty")
+                raise ValueError("%s value can not be empty" % self.__class__.__name__)
             return value
         if isinstance(value, self.__class__):
             return value._value