diff --git a/news/13443.bugfix.rst b/news/13443.bugfix.rst new file mode 100644 index 00000000000..68e716392e3 --- /dev/null +++ b/news/13443.bugfix.rst @@ -0,0 +1,2 @@ +Handle malformed ``Version`` metadata entries and +show a sensible error message instead of crashing. diff --git a/src/pip/_internal/metadata/importlib/_dists.py b/src/pip/_internal/metadata/importlib/_dists.py index 97363af9a55..89364b8b7ab 100644 --- a/src/pip/_internal/metadata/importlib/_dists.py +++ b/src/pip/_internal/metadata/importlib/_dists.py @@ -28,6 +28,7 @@ from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file from ._compat import ( + BadMetadata, BasePath, get_dist_canonical_name, parse_name_and_version_from_info_directory, @@ -165,9 +166,14 @@ def canonical_name(self) -> NormalizedName: @property def version(self) -> Version: - if version := parse_name_and_version_from_info_directory(self._dist)[1]: + try: + version = ( + parse_name_and_version_from_info_directory(self._dist)[1] + or self._dist.version + ) return parse_version(version) - return parse_version(self._dist.version) + except TypeError: + raise BadMetadata(self._dist, reason="invalid metadata entry `version`") @property def raw_version(self) -> str: