diff options
author | Ilya Etingof <etingof@gmail.com> | 2018-06-30 23:48:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-30 23:48:13 +0200 |
commit | 271f71af5a7245a7cf7565ee40bb5a272c2dc9f1 (patch) | |
tree | f1311e22012e9fe20bfdfb3e934b338e4000f3be | |
parent | d5327005dabb1689c9af5124d7cf9fcdf16b1446 (diff) | |
download | pyasn1-git-271f71af5a7245a7cf7565ee40bb5a272c2dc9f1.tar.gz |
Fix native encoder type map (#132)
The type map should include all ASN.1 types rather
than just ambiguous ones for performance reasons.
Incomplete type ID map triggers building a new
TagSet out of the value being encoded. If that
value does not have base tags set, that leads to
a crash.
-rw-r--r-- | CHANGES.rst | 6 | ||||
-rw-r--r-- | pyasn1/codec/native/encoder.py | 30 |
2 files changed, 34 insertions, 2 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index e72e35a..ffbcf83 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,4 +1,10 @@ +Revision 0.4.4, released XX-07-2018 +----------------------------------- + +- Fixed native encoder type map to include all ASN.1 types + rather than just ambiguous ones + Revision 0.4.3, released 23-05-2018 ----------------------------------- diff --git a/pyasn1/codec/native/encoder.py b/pyasn1/codec/native/encoder.py index 87e50f2..0956191 100644 --- a/pyasn1/codec/native/encoder.py +++ b/pyasn1/codec/native/encoder.py @@ -132,14 +132,40 @@ tagMap = { useful.UTCTime.tagSet: OctetStringEncoder() } -# Type-to-codec map for ambiguous ASN.1 types + +# Put in ambiguous & non-ambiguous types for faster codec lookup typeMap = { + univ.Boolean.typeId: BooleanEncoder(), + univ.Integer.typeId: IntegerEncoder(), + univ.BitString.typeId: BitStringEncoder(), + univ.OctetString.typeId: OctetStringEncoder(), + univ.Null.typeId: NullEncoder(), + univ.ObjectIdentifier.typeId: ObjectIdentifierEncoder(), + univ.Enumerated.typeId: IntegerEncoder(), + univ.Real.typeId: RealEncoder(), + # Sequence & Set have same tags as SequenceOf & SetOf univ.Set.typeId: SetEncoder(), univ.SetOf.typeId: SequenceOfEncoder(), univ.Sequence.typeId: SequenceEncoder(), univ.SequenceOf.typeId: SequenceOfEncoder(), univ.Choice.typeId: ChoiceEncoder(), - univ.Any.typeId: AnyEncoder() + univ.Any.typeId: AnyEncoder(), + # character string types + char.UTF8String.typeId: OctetStringEncoder(), + char.NumericString.typeId: OctetStringEncoder(), + char.PrintableString.typeId: OctetStringEncoder(), + char.TeletexString.typeId: OctetStringEncoder(), + char.VideotexString.typeId: OctetStringEncoder(), + char.IA5String.typeId: OctetStringEncoder(), + char.GraphicString.typeId: OctetStringEncoder(), + char.VisibleString.typeId: OctetStringEncoder(), + char.GeneralString.typeId: OctetStringEncoder(), + char.UniversalString.typeId: OctetStringEncoder(), + char.BMPString.typeId: OctetStringEncoder(), + # useful types + useful.ObjectDescriptor.typeId: OctetStringEncoder(), + useful.GeneralizedTime.typeId: OctetStringEncoder(), + useful.UTCTime.typeId: OctetStringEncoder() } |