From 1e0d2109d8c1c063a90251351e2f9fcbec5b7314 Mon Sep 17 00:00:00 2001 From: cs948294549 <948294549@qq.com> Date: Thu, 29 Oct 2020 10:51:47 +0800 Subject: [PATCH] Update ipv6_unicast.py if len(nlri_data[1:offset]) <=32, IPv6 address would transform to IPv4 address, so check nlri_data[1:offset] length and padding \x00 on the right --- yabgp/message/attribute/nlri/ipv6_unicast.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/yabgp/message/attribute/nlri/ipv6_unicast.py b/yabgp/message/attribute/nlri/ipv6_unicast.py index f625c03..77080c3 100644 --- a/yabgp/message/attribute/nlri/ipv6_unicast.py +++ b/yabgp/message/attribute/nlri/ipv6_unicast.py @@ -42,8 +42,12 @@ def parse(cls, nlri_data): else: prefix_byte_len = prefix_bit_len / 8 + 1 offset = int(prefix_byte_len + 1) - prefix_addr = str(netaddr.IPAddress(int(binascii.b2a_hex(nlri_data[1:offset]), 16))) \ - + '/%s' % prefix_bit_len + if len(nlri_data[1:offset]) < 16: + prefix_addr = str(netaddr.IPAddress(int(binascii.b2a_hex(nlri_data[1:offset]+b'\x00'*(16-len(nlri_data[1:offset]))), 16))) \ + + '/%s' % prefix_bit_len + else: + prefix_addr = str(netaddr.IPAddress(int(binascii.b2a_hex(nlri_data[1:offset]), 16))) \ + + '/%s' % prefix_bit_len nlri_list.append(prefix_addr) nlri_data = nlri_data[int(prefix_byte_len) + 1:]