summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-07-07 10:03:44 +0200
committerIlya Etingof <etingof@gmail.com>2017-07-07 10:03:44 +0200
commit602f7a3a1b6ea43ada2973e248b97f7b0e80f115 (patch)
treea77307e0d9e1975e76cf7a9de1c5c4b33bfb5c69
parent1967b4af0e38506d4c1cdaf56f85d74e51927978 (diff)
downloadpyasn1-git-602f7a3a1b6ea43ada2973e248b97f7b0e80f115.tar.gz
run hole type substitution only when components are in place
-rw-r--r--pyasn1/codec/ber/decoder.py35
1 files changed, 24 insertions, 11 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py
index 46f861d..e7da9a1 100644
--- a/pyasn1/codec/ber/decoder.py
+++ b/pyasn1/codec/ber/decoder.py
@@ -403,18 +403,19 @@ class SequenceAndSetDecoderBase(AbstractConstructedDecoder):
matchTags=False, matchConstraints=False
)
- 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]
- )
+ 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]
+ )
asn1Object.setComponentByName(holeName, component, matchTags=False, matchConstraints=False)
- if not namedTypes:
+ else:
asn1Object.verifySizeSpec()
return asn1Object, tail
@@ -470,7 +471,19 @@ class SequenceAndSetDecoderBase(AbstractConstructedDecoder):
'No EOO seen before substrate ends'
)
- if not namedTypes:
+ 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]
+ )
+ asn1Object.setComponentByName(holeName, component, matchTags=False, matchConstraints=False)
+
+ else:
asn1Object.verifySizeSpec()
return asn1Object, substrate