summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-04-21 01:09:10 +0200
committerIlya Etingof <etingof@gmail.com>2017-09-10 14:20:41 +0200
commit22f9942cddb972c9f00ea8fff998b9ed7537d59f (patch)
tree55ed3aa8c69d284c09abf6960cd46e80ff0399bc
parent7483bbfebf55a8dd3c74e3af93311b759186991c (diff)
downloadpyasn1-git-22f9942cddb972c9f00ea8fff998b9ed7537d59f.tar.gz
ANY DEFINED BY decoding implemented
-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