diff options
author | hploetz <hploetz@f711b948-2313-0410-aaa9-d29f33439f0b> | 2006-08-06 03:47:58 +0000 |
---|---|---|
committer | hploetz <hploetz@f711b948-2313-0410-aaa9-d29f33439f0b> | 2006-08-06 03:47:58 +0000 |
commit | 6759203dbfc4d89bbd9e72adb50605bed029812f (patch) | |
tree | 3afbe7bb305d8b6526e621cd1f4e12b58f4c5f18 /TLV_utils.py | |
parent | bc89e9c2624de008b48ab789b58fa3a987de24f8 (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.py | 19 |
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:] |