Fix multi-byte tags in combination with multi-byte lengths

git-svn-id: svn+ssh://localhost/home/henryk/svn/cyberflex-shell/trunk@110 f711b948-2313-0410-aaa9-d29f33439f0b
This commit is contained in:
hploetz 2006-08-06 03:47:58 +00:00
parent bc89e9c262
commit 6759203dbf
1 changed files with 9 additions and 10 deletions

View File

@ -274,22 +274,21 @@ def tlv_unpack(data):
data = data[1:]
if (tag & 0x1F) == 0x1F:
tag = (tag << 8) | ord(data[0])
data = data[1:]
while ord(data[0]) & 0x80 == 0x80:
tag = tag << 8 + ord(data[0])
data = data[1:]
tag = (tag << 8) | ord(data[0])
data = data[1:]
length = ord(data[0])
if length < 0x80:
data = data[1:]
elif length == 0x81:
length = ord(data[1])
data = data [2:]
elif length == 0x82:
length = ord(data[1]) * 256 + ord(data[2])
data = data[3:]
else:
raise ValueError, "Invalid TLV length field"
elif length & 0x80 == 0x80:
length_ = 0
data = data[1:]
for i in range(0,length & 0x7F):
length_ = length_ * 256 + ord(data[0])
data = data[1:]
length = length_
value = data[:length]
rest = data[length:]