summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.rst5
-rw-r--r--pyasn1/codec/ber/decoder.py21
-rw-r--r--pyasn1/type/namedtype.py16
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