aboutsummaryrefslogtreecommitdiffstats
path: root/TLV_utils.py
diff options
context:
space:
mode:
authorhploetz <hploetz@f711b948-2313-0410-aaa9-d29f33439f0b>2006-08-06 03:47:58 +0000
committerhploetz <hploetz@f711b948-2313-0410-aaa9-d29f33439f0b>2006-08-06 03:47:58 +0000
commit6759203dbfc4d89bbd9e72adb50605bed029812f (patch)
tree3afbe7bb305d8b6526e621cd1f4e12b58f4c5f18 /TLV_utils.py
parentbc89e9c2624de008b48ab789b58fa3a987de24f8 (diff)
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
Diffstat (limited to 'TLV_utils.py')
-rw-r--r--TLV_utils.py19
1 files changed, 9 insertions, 10 deletions
diff --git a/TLV_utils.py b/TLV_utils.py
index 22e646f..f3f31ca 100644
--- a/TLV_utils.py
+++ b/TLV_utils.py
@@ -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:]