[Bug 2103454] Re: 3.8.10-0ubuntu1~20.04.16 broke IPv6 zone parsing

Marc Deslauriers 2103454 at bugs.launchpad.net
Mon Mar 17 22:49:24 UTC 2025


** Changed in: python3.8 (Ubuntu)
       Status: New => Invalid

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to python3.8 in Ubuntu.
https://bugs.launchpad.net/bugs/2103454

Title:
  3.8.10-0ubuntu1~20.04.16 broke IPv6 zone parsing

Status in python3.8 package in Ubuntu:
  Invalid
Status in python3.8 source package in Focal:
  Fix Released

Bug description:
  It appears 3.8.10-0ubuntu1~20.04.16 fixed
  https://github.com/python/cpython/issues/105704 . However, in doing
  so, it also broke IPv6 zone parsing.

  The following used to work on focal:
  >>> from urllib.parse import urlparse
  >>> urlparse('http://[fe80::1ff:fe23:4567:890a%25eth0]/')

  But now, we get:
  (focal-amd64)james at cow:/build/cloud-init-M2qWdO/cloud-init-24.4.1$ dpkg -l | grep python3.8
  ii  libpython3.8-minimal:amd64       3.8.10-0ubuntu1~20.04.16     amd64        Minimal subset of the Python language (version 3.8)
  ii  libpython3.8-stdlib:amd64        3.8.10-0ubuntu1~20.04.16     amd64        Interactive high-level object-oriented language (standard library, version 3.8)
  ii  python3.8                        3.8.10-0ubuntu1~20.04.16     amd64        Interactive high-level object-oriented language (version 3.8)
  ii  python3.8-minimal                3.8.10-0ubuntu1~20.04.16     amd64        Minimal subset of the Python language (version 3.8)
  (focal-amd64)james at cow:/build/cloud-init-M2qWdO/cloud-init-24.4.1$ python3
  Python 3.8.10 (default, Mar 11 2025, 17:45:31) 
  [GCC 9.4.0] on linux
  Type "help", "copyright", "credits" or "license" for more information.
  >>> from urllib.parse import urlparse
  >>> urlparse('http://[fe80::1ff:fe23:4567:890a%25eth0]/')
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python3.8/urllib/parse.py", line 385, in urlparse
      splitresult = urlsplit(url, scheme, allow_fragments)
    File "/usr/lib/python3.8/urllib/parse.py", line 495, in urlsplit
      _check_bracketed_netloc(netloc)
    File "/usr/lib/python3.8/urllib/parse.py", line 444, in _check_bracketed_netloc
      _check_bracketed_host(hostname)
    File "/usr/lib/python3.8/urllib/parse.py", line 453, in _check_bracketed_host
      ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
    File "/usr/lib/python3.8/ipaddress.py", line 53, in ip_address
      raise ValueError('%r does not appear to be an IPv4 or IPv6 address' %
  ValueError: 'fe80::1ff:fe23:4567:890a%25eth0' does not appear to be an IPv4 or IPv6 address

  
  Compared to python tip (with the CVE fix) this works as expected:
  $ python3
  Python 3.14.0a6+ (heads/main:a09c2b2ba64, Mar 17 2025, 13:25:19) [GCC 14.2.0] on linux
  Type "help", "copyright", "credits" or "license" for more information.
  >>> from urllib.parse import urlparse
  >>> urlparse('http://[fe80::1ff:fe23:4567:890a%25eth0]/')
  ParseResult(scheme='http', netloc='[fe80::1ff:fe23:4567:890a%25eth0]', path='/', params='', query='', fragment='')
  >>> 
  >>> urlparse('http://prefix.[v1.example]/')  # show that CVE is fixed
  Traceback (most recent call last):
    File "<python-input-2>", line 1, in <module>
      urlparse('http://prefix.[v1.example]/')  # show that CVE is fixed
      ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/james/.pyenv/versions/3.14-dev/lib/python3.14/urllib/parse.py", line 395, in urlparse
      scheme, netloc, url, params, query, fragment = _urlparse(url, scheme, allow_fragments)
                                                     ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/james/.pyenv/versions/3.14-dev/lib/python3.14/urllib/parse.py", line 400, in _urlparse
      scheme, netloc, url, query, fragment = _urlsplit(url, scheme, allow_fragments)
                                             ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/james/.pyenv/versions/3.14-dev/lib/python3.14/urllib/parse.py", line 525, in _urlsplit
      _check_bracketed_netloc(netloc)
      ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
    File "/home/james/.pyenv/versions/3.14-dev/lib/python3.14/urllib/parse.py", line 450, in _check_bracketed_netloc
      raise ValueError("Invalid IPv6 URL")
  ValueError: Invalid IPv6 URL
  >>>

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/python3.8/+bug/2103454/+subscriptions




More information about the foundations-bugs mailing list