summaryrefslogtreecommitdiff
path: root/pyasn1/codec/ber/encoder.py
diff options
context:
space:
mode:
authorelie <elie>2012-12-21 15:04:26 +0000
committerelie <elie>2012-12-21 15:04:26 +0000
commit72f0854b76d97bca07a28ad90b402373a9b622a6 (patch)
treea68f092a8180fbf1eefdc744cc2d0becbbb078fb /pyasn1/codec/ber/encoder.py
parent842d0732adccbd5b78d92d151a34cb3f6a4d878c (diff)
downloadpyasn1-72f0854b76d97bca07a28ad90b402373a9b622a6.tar.gz
The compact (valueless) way of encoding zero INTEGERs introduced inrelease_0_1_6_tag
0.1.5 seems to fail miserably as the world is filled with broken BER decoders. So we had to back off the *encoder* for a while. There's still the IntegerEncoder.supportCompactZero flag which enables compact encoding form whenever it evaluates to True.
Diffstat (limited to 'pyasn1/codec/ber/encoder.py')
-rw-r--r--pyasn1/codec/ber/encoder.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/pyasn1/codec/ber/encoder.py b/pyasn1/codec/ber/encoder.py
index cc0d731..ae26130 100644
--- a/pyasn1/codec/ber/encoder.py
+++ b/pyasn1/codec/ber/encoder.py
@@ -87,9 +87,15 @@ class BooleanEncoder(AbstractItemEncoder):
class IntegerEncoder(AbstractItemEncoder):
supportIndefLenMode = 0
+ supportCompactZero = False
def encodeValue(self, encodeFun, value, defMode, maxChunkSize):
if value == 0: # shortcut for zero value
- return null, 0
+ if self.supportCompactZero:
+ # this seems to be a correct way for encoding zeros
+ return null, 0
+ else:
+ # this seems to be a widespread way for encoding zeros
+ return ints2octs((0,)), 0
octets = []
value = int(value) # to save on ops on asn1 type
while 1: