summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2018-06-30 23:48:13 +0200
committerGitHub <noreply@github.com>2018-06-30 23:48:13 +0200
commit271f71af5a7245a7cf7565ee40bb5a272c2dc9f1 (patch)
treef1311e22012e9fe20bfdfb3e934b338e4000f3be
parentd5327005dabb1689c9af5124d7cf9fcdf16b1446 (diff)
downloadpyasn1-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.rst6
-rw-r--r--pyasn1/codec/native/encoder.py30
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()
}