diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-07-07 10:03:44 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-07-07 10:03:44 +0200 |
commit | 602f7a3a1b6ea43ada2973e248b97f7b0e80f115 (patch) | |
tree | a77307e0d9e1975e76cf7a9de1c5c4b33bfb5c69 | |
parent | 1967b4af0e38506d4c1cdaf56f85d74e51927978 (diff) | |
download | pyasn1-git-602f7a3a1b6ea43ada2973e248b97f7b0e80f115.tar.gz |
run hole type substitution only when components are in place
-rw-r--r-- | pyasn1/codec/ber/decoder.py | 35 |
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 |