From 4e00eba76716cb4c546b1d81b1357927ca6e5a93 Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Wed, 20 Sep 2017 22:18:12 +0200 Subject: fixed crash on exp tagged Sequence component encoding (#79) Also EOO encoder call replaced with a constant outcome --- pyasn1/codec/ber/encoder.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'pyasn1') diff --git a/pyasn1/codec/ber/encoder.py b/pyasn1/codec/ber/encoder.py index ef12bb4..838d446 100644 --- a/pyasn1/codec/ber/encoder.py +++ b/pyasn1/codec/ber/encoder.py @@ -16,6 +16,10 @@ __all__ = ['encode'] class AbstractItemEncoder(object): supportIndefLenMode = 1 + # An outcome of otherwise legit call `encodeFun(eoo.endOfOctets)` + eooIntegerSubstrate = (0, 0) + eooOctetsSubstrate = ints2octs(eooIntegerSubstrate) + # noinspection PyMethodMayBeStatic def encodeTag(self, singleTag, isConstructed): tagClass, tagFormat, tagId = singleTag @@ -88,11 +92,18 @@ class AbstractItemEncoder(object): if isOctets: substrate = ints2octs(header) + substrate + + if not defModeOverride: + substrate += self.eooOctetsSubstrate + else: - substrate = ints2octs(header + substrate) + substrate = header + substrate + + if not defModeOverride: + substrate += self.eooIntegerSubstrate - if not defModeOverride: - substrate += encodeFun(eoo.endOfOctets, defMode=defModeOverride) + if not isOctets: + substrate = ints2octs(substrate) return substrate -- cgit v1.2.3