I can config the problem on Noble's ESM package that is breaking the LXD snap builds.
From https://launchpadlibrarian.net/863097522/buildlog_snap_ubuntu_noble_amd64_lxd-latest-edge_BUILDING.txt.gz: ``` [29/May/2026:15:55:14 +0000] "GET http://private-ppa.buildd/ubuntu-esm/esm-apps-security/ubuntu/pool/main/p/python-pip/python3-pip_24.0%2bdfsg-1ubuntu1.3%2besm1_all.deb HTTP/1.1" 200 1320794 "-" "Debian APT-HTTP/1.3 (2.8.3) non-interactive" [29/May/2026:15:55:14 +0000] "GET http://ftpmaster.internal/ubuntu/pool/main/r/rsync/rsync_3.2.7-1ubuntu1.4_amd64.deb HTTP/1.1" 200 442294 "-" "Debian APT-HTTP/1.3 (2.8.3) non-interactive" [29/May/2026:15:55:14 +0000] "GET http://private-ppa.buildd/ubuntu-esm/esm-apps-security/ubuntu/pool/main/p/python-pip/python3-pip-whl_24.0%2bdfsg-1ubuntu1.3%2besm1_all.deb HTTP/1.1" 200 1707784 "-" "Debian APT-HTTP/1.3 (2.8.3) non-interactive ... :: + set -eux :: + pip download --dest python/wheels meson==1.9.0 :: ERROR: Exception: :: Traceback (most recent call last): :: File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 180, in exc_logging_wrapper :: status = run_func(*args) :: ^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 245, in wrapper :: return func(self, options, args) :: ^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/commands/download.py", line 132, in run :: requirement_set = resolver.resolve(reqs, check_supported_wheels=True) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve :: result = self._result = resolver.resolve( :: ^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve :: state = resolution.resolve(requirements, max_rounds=max_rounds) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/resolvers.py", line 397, in resolve :: self._add_to_criteria(self.state.criteria, r, parent=None) :: File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria :: if not criterion.candidates: :: ^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/structs.py", line 156, in __bool__ :: return bool(self._sequence) :: ^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__ :: return any(self) :: ^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in <genexpr> :: return (c for c in iterator if id(c) not in self._incompatible_ids) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 44, in _iter_built :: for version, func in infos: :: File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/factory.py", line 297, in iter_index_candidate_infos :: result = self._finder.find_best_candidate( :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 890, in find_best_candidate :: candidates = self.find_all_candidates(project_name) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 831, in find_all_candidates :: page_candidates = list(page_candidates_it) :: ^^^^^^^^^^^^^^^^^^^^^^^^ [29/May/2026:15:59:53 +0000] "CONNECT pypi.org:443 HTTP/1.1" 200 39700 "-" "-" :: File "/usr/lib/python3/dist-packages/pip/_internal/index/sources.py", line 194, in page_candidates :: yield from self._candidates_from_page(self._link) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 795, in process_project_url :: page_links = list(parse_links(index_response)) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/index/collector.py", line 223, in wrapper_wrapper :: return list(fn(page)) :: ^^^^^^^^^^^^^^ :: File "/usr/lib/python3/dist-packages/pip/_internal/index/collector.py", line 236, in parse_links :: data = json.loads(page.content) :: ^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3.12/json/__init__.py", line 346, in loads :: return _default_decoder.decode(s) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3.12/json/decoder.py", line 337, in decode :: obj, end = self.raw_decode(s, idx=_w(s, 0).end()) :: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: File "/usr/lib/python3.12/json/decoder.py", line 353, in raw_decode :: obj, end = self.scan_once(s, idx) :: ^^^^^^^^^^^^^^^^^^^^^^ :: json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 40961 (char 40960) ``` Trying to reproduce on Resolute, I get similar problems with 25.1.1+dfsg-1ubuntu2+esm1: ``` $ pip download --dest python/wheels meson==1.9.0 ERROR: Exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 105, in _run_wrapper status = _inner_run() File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 96, in _inner_run return self.run(options, args) ~~~~~~~~^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 68, in wrapper return func(self, options, args) File "/usr/lib/python3/dist-packages/pip/_internal/commands/download.py", line 132, in run requirement_set = resolver.resolve(reqs, check_supported_wheels=True) File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/resolver.py", line 96, in resolve result = self._result = resolver.resolve( ~~~~~~~~~~~~~~~~^ collected.requirements, max_rounds=limit_how_complex_resolution_can_be ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/resolvers/resolution.py", line 515, in resolve state = resolution.resolve(requirements, max_rounds=max_rounds) File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/resolvers/resolution.py", line 388, in resolve self._add_to_criteria(self.state.criteria, r, parent=None) ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/resolvers/resolution.py", line 141, in _add_to_criteria if not criterion.candidates: ^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_vendor/resolvelib/structs.py", line 194, in __bool__ return bool(self._sequence) File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 163, in __bool__ self._bool = any(self) ~~~^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 147, in <genexpr> return (c for c in iterator if id(c) not in self._incompatible_ids) ^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 33, in _iter_built for version, func in infos: ^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/factory.py", line 307, in iter_index_candidate_infos result = self._finder.find_best_candidate( project_name=name, specifier=specifier, hashes=hashes, ) File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 906, in find_best_candidate candidates = self.find_all_candidates(project_name) File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 843, in find_all_candidates page_candidates = list(page_candidates_it) File "/usr/lib/python3/dist-packages/pip/_internal/index/sources.py", line 193, in page_candidates yield from self._candidates_from_page(self._link) ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 805, in process_project_url page_links = list(parse_links(index_response)) ~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/index/collector.py", line 218, in wrapper_wrapper return list(fn(page)) File "/usr/lib/python3/dist-packages/pip/_internal/index/collector.py", line 231, in parse_links data = json.loads(page.content) File "/usr/lib/python3.14/json/__init__.py", line 352, in loads return _default_decoder.decode(s) ~~~~~~~~~~~~~~~~~~~~~~~^^^ File "/usr/lib/python3.14/json/decoder.py", line 345, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.14/json/decoder.py", line 361, in raw_decode obj, end = self.scan_once(s, idx) ~~~~~~~~~~~~~~^^^^^^^^ json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 40961 (char 40960) ``` Still on Resolute, `sudo apt-get install python3-pip=25.1.1+dfsg-1ubuntu2` is enough to make it work again. ** Changed in: python-pip (Ubuntu) Status: New => Confirmed -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2154576 Title: python3-pip-whl 24.0+dfsg-1ubuntu1.3+esm1: CVE-2025-66471 backport truncates gzip-decoded responses To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/2154576/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
