Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3217780

Browse files
[3.12]gh-123409: fixIPv6Address.reverse_pointer for IPv4-mapped addresses (GH-123419) (GH-135086)
Fix functionality that was broken with better textual representation for IPv4-mapped addresses (gh-87799)(cherry picked from commit77a2fb4)Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
1 parent19de092 commit3217780

File tree

3 files changed

+53
-12
lines changed

3 files changed

+53
-12
lines changed

‎Lib/ipaddress.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1967,12 +1967,21 @@ def __init__(self, address):
19671967
def_explode_shorthand_ip_string(self):
19681968
ipv4_mapped=self.ipv4_mapped
19691969
ifipv4_mappedisNone:
1970-
long_form=super()._explode_shorthand_ip_string()
1971-
else:
1972-
prefix_len=30
1973-
raw_exploded_str=super()._explode_shorthand_ip_string()
1974-
long_form="%s%s"% (raw_exploded_str[:prefix_len],str(ipv4_mapped))
1975-
returnlong_form
1970+
returnsuper()._explode_shorthand_ip_string()
1971+
prefix_len=30
1972+
raw_exploded_str=super()._explode_shorthand_ip_string()
1973+
returnf"{raw_exploded_str[:prefix_len]}{ipv4_mapped!s}"
1974+
1975+
def_reverse_pointer(self):
1976+
ipv4_mapped=self.ipv4_mapped
1977+
ifipv4_mappedisNone:
1978+
returnsuper()._reverse_pointer()
1979+
prefix_len=30
1980+
raw_exploded_str=super()._explode_shorthand_ip_string()[:prefix_len]
1981+
# ipv4 encoded using hexadecimal nibbles instead of decimals
1982+
ipv4_int=ipv4_mapped._ip
1983+
reverse_chars=f"{raw_exploded_str}{ipv4_int:008x}"[::-1].replace(':','')
1984+
return'.'.join(reverse_chars)+'.ip6.arpa'
19761985

19771986
def_ipv4_mapped_ipv6_to_str(self):
19781987
"""Return convenient text representation of IPv4-mapped IPv6 address

‎Lib/test/test_ipaddress.py

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2618,12 +2618,42 @@ def testExplodeShortHandIpStr(self):
26182618
self.assertEqual('192.168.178.1',addr4.exploded)
26192619

26202620
deftestReversePointer(self):
2621-
addr1=ipaddress.IPv4Address('127.0.0.1')
2622-
addr2=ipaddress.IPv6Address('2001:db8::1')
2623-
self.assertEqual('1.0.0.127.in-addr.arpa',addr1.reverse_pointer)
2624-
self.assertEqual('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.'+
2625-
'b.d.0.1.0.0.2.ip6.arpa',
2626-
addr2.reverse_pointer)
2621+
foraddr_v4,expectedin [
2622+
('127.0.0.1','1.0.0.127.in-addr.arpa'),
2623+
# test vector: https://www.rfc-editor.org/rfc/rfc1035, §3.5
2624+
('10.2.0.52','52.0.2.10.in-addr.arpa'),
2625+
]:
2626+
withself.subTest('ipv4_reverse_pointer',addr=addr_v4):
2627+
addr=ipaddress.IPv4Address(addr_v4)
2628+
self.assertEqual(addr.reverse_pointer,expected)
2629+
2630+
foraddr_v6,expectedin [
2631+
(
2632+
'2001:db8::1', (
2633+
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.'
2634+
'0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.'
2635+
'ip6.arpa'
2636+
)
2637+
),
2638+
(
2639+
'::FFFF:192.168.1.35', (
2640+
'3.2.1.0.8.a.0.c.f.f.f.f.0.0.0.0.'
2641+
'0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.'
2642+
'ip6.arpa'
2643+
)
2644+
),
2645+
# test vector: https://www.rfc-editor.org/rfc/rfc3596, §2.5
2646+
(
2647+
'4321:0:1:2:3:4:567:89ab', (
2648+
'b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.'
2649+
'2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.'
2650+
'ip6.arpa'
2651+
)
2652+
)
2653+
]:
2654+
withself.subTest('ipv6_reverse_pointer',addr=addr_v6):
2655+
addr=ipaddress.IPv6Address(addr_v6)
2656+
self.assertEqual(addr.reverse_pointer,expected)
26272657

26282658
deftestIntRepresentation(self):
26292659
self.assertEqual(16909060,int(self.ipv4_address))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix:attr:`ipaddress.IPv6Address.reverse_pointer` output according to
2+
:rfc:`RFC 3596, §2.5 <3596#section-2.5>`. Patch by Bénédikt Tran.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp