ipaddress.reverse_pointer returns nonsense if prefixed input is given
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 36k
- PR merge metrics
- PR metrics pending
Description
Bug report
ipaddress.reverse_pointer does not seem to validate its input at all. For example:
$ python3
Python 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ipaddress
>>> ipaddress.ip_network('2001:db8:1:2:3:4:5::/64',False).reverse_pointer
'4.6./.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
>>>
This is very obviously wrong.
In this case of prefixed input, the output should be cut to the appropriate prefix length, yielding
2.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa as output. It is ok to assume /128 as the default, converting 2001:db8:1:2:3:4:5:: to 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa, but input longer than that is an error.
Prefixed address strings are for example important when generating zone names for the server side of IPv6 reverse DNS. Run-of-the-mill network client software is unlikely to use this for addresses shorter than /128, but for the server side it is an important use case.
Greetings
Marc
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the reported Python reproducer and tracing the ipaddress.reverse_pointer entry point to understand how prefixed input is handled. Done means prefixed IPv6 input produces a reverse-pointer name cut to its prefix length, default unprefixed input is treated as /128, and input longer than /128 is rejected.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- networking
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100