diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-04-21 01:09:10 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-09-10 14:20:41 +0200 |
commit | 22f9942cddb972c9f00ea8fff998b9ed7537d59f (patch) | |
tree | 55ed3aa8c69d284c09abf6960cd46e80ff0399bc | |
parent | 7483bbfebf55a8dd3c74e3af93311b759186991c (diff) | |
download | pyasn1-git-22f9942cddb972c9f00ea8fff998b9ed7537d59f.tar.gz |
ANY DEFINED BY decoding implemented
-rw-r--r-- | CHANGES.rst | 5 | ||||
-rw-r--r-- | pyasn1/codec/ber/decoder.py | 21 | ||||
-rw-r--r-- | pyasn1/type/namedtype.py | 16 |
3 files changed, 23 insertions, 19 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index b1bfea4..72f7526 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,4 +1,9 @@ +Revision 0.4.1, released XX-09-2017 +----------------------------------- + +- ANY DEFINED BY clause support implemented + Revision 0.3.5, released XX-09-2017 ----------------------------------- diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py index c080b96..fad6eea 100644 --- a/pyasn1/codec/ber/decoder.py +++ b/pyasn1/codec/ber/decoder.py @@ -529,19 +529,18 @@ class UniversalConstructedTypeDecoder(AbstractConstructedDecoder): ) idx += 1 - if namedTypes: - for holeName, governingName, typesMap in namedTypes.holes: - holeComponent = asn1Object[holeName] - if holeComponent.isValue: - governingComponent = asn1Object[governingName] - if governingComponent in typesMap: - component, rest = decodeFun( - holeComponent.asOctets(), - asn1Spec=typesMap[governingComponent] - ) + for holeName, governingName, typesMap in namedTypes.holes: + holeComponent = asn1Object[holeName] + if holeComponent.isValue: + governingComponent = asn1Object[governingName] + if governingComponent in typesMap: + component, rest = decodeFun( + holeComponent.asOctets(), + asn1Spec=typesMap[governingComponent] + ) asn1Object.setComponentByName(holeName, component, matchTags=False, matchConstraints=False) - else: + if not namedTypes: asn1Object.verifySizeSpec() return asn1Object, tail diff --git a/pyasn1/type/namedtype.py b/pyasn1/type/namedtype.py index 3cdb2a6..6bf82f4 100644 --- a/pyasn1/type/namedtype.py +++ b/pyasn1/type/namedtype.py @@ -138,7 +138,7 @@ class NamedTypes(object): self.__keys = frozenset([namedType.name for namedType in self.__namedTypes]) self.__values = tuple([namedType.asn1Object for namedType in self.__namedTypes]) self.__items = tuple([(namedType.name, namedType.asn1Object) for namedType in self.__namedTypes]) - self.__holes = None + self.__holes = self.__computeTypeHoles() def __repr__(self): return '%s(%s)' % ( @@ -528,12 +528,12 @@ class NamedTypes(object): @property def holes(self): - if self.__holes is None: - holes = [] - for namedType in self.__namedTypes: - if namedType.governingName: - holes.append((namedType.name, namedType.governingName, namedType.typesMap)) + return self.__holes - self.__holes = holes + def __computeTypeHoles(self): + holes = [] + for namedType in self.__namedTypes: + if namedType.governingName: + holes.append((namedType.name, namedType.governingName, namedType.typesMap)) - return self.__holes + return holes |