Fix BER decoding for the long form

The below ASN1 was parsed as "long form" even if it is not the
long form. The highest bit indicates if it is the long form or
the indefinite form. The below was going through the long form
path but there is no long form in it. Change the long form code
but don't verify it. It might still be broken.

[98, 87, 130, 2, 120, 33, 131, 2, 127, 255, 132, 16, 160, 0, 0, 0, 135, 16, 2, 255, 255, 255, 255, 137, 7, 9, 0, 0, 165, 22, 131, 2, 127, 255, 203, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 1, 128, 138, 1, 5, 171, 21, 128, 1, 1, 164, 6, 131, 1, 10, 149, 1, 8, 128, 1, 64, 151, 0, 128, 1, 6, 144, 0, 198, 9, 144, 1, 64, 131, 1, 1, 131, 1, 129]
This commit is contained in:
Holger Hans Peter Freyther 2015-06-25 07:14:26 +02:00
parent 4807dd9b21
commit a1bf5c43e7
1 changed files with 2 additions and 2 deletions

View File

@ -163,8 +163,8 @@ def first_BERTLV_parser(bytelist):
Tag_num += Tag_bits[len(Tag_bits)-j-1] * pow(2, j)
# Length coded with more than 1 byte
if bytelist[i+1] > 0x50:
Len_num = bytelist[i+1] - 0x50
if bytelist[i+1] & 0x80 > 0:
Len_num = bytelist[i+1] - 0x80
Len_bytes = bytelist[i+2:i+1+Len_num]
Len = 0
for j in range(len(Len_bytes)):