From bd3b13b2acac29086964a720e2e7fdeff3bbc117 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Wed, 4 Nov 2020 15:44:39 +0800 Subject: [PATCH] Bugfix: don't unquote file URL --- news/4089.bugfix.rst | 1 + pipenv/vendor/requirementslib/models/requirements.py | 8 ++++---- pipenv/vendor/requirementslib/models/setup_info.py | 4 ++-- pipenv/vendor/vendor.txt | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 news/4089.bugfix.rst diff --git a/news/4089.bugfix.rst b/news/4089.bugfix.rst new file mode 100644 index 00000000..fce0fc48 --- /dev/null +++ b/news/4089.bugfix.rst @@ -0,0 +1 @@ +Fix a bug that percent encoded characters will be unquoted incorrectly in the file URL. diff --git a/pipenv/vendor/requirementslib/models/requirements.py b/pipenv/vendor/requirementslib/models/requirements.py index bf62ad24..8578f73e 100644 --- a/pipenv/vendor/requirementslib/models/requirements.py +++ b/pipenv/vendor/requirementslib/models/requirements.py @@ -1799,7 +1799,7 @@ class FileRequirement(object): if link_info: link = link_info.link if link.url_without_fragment: - uri = unquote(link.url_without_fragment) + uri = link.url_without_fragment extras = () # type: Optional[Tuple[STRING_TYPE, ...]] if "extras" in pipfile: extras = tuple(pipfile["extras"]) # type: ignore @@ -1821,10 +1821,10 @@ class FileRequirement(object): else: if name: line_name = "{0}{1}".format(name, extras_string) - line = "{0}#egg={1}".format(unquote(link.url_without_fragment), line_name) + line = "{0}#egg={1}".format(link.url_without_fragment, line_name) else: if link: - line = unquote(link.url) + line = link.url elif uri and isinstance(uri, six.string_types): line = uri else: @@ -1847,7 +1847,7 @@ class FileRequirement(object): link_url = None # type: Optional[STRING_TYPE] seed = None # type: Optional[STRING_TYPE] if self.link is not None: - link_url = unquote(self.link.url_without_fragment) + link_url = self.link.url_without_fragment is_vcs = getattr(self.link, "is_vcs", not self.link.is_artifact) if self._uri_scheme and self._uri_scheme == "path": # We may need any one of these for passing to pip diff --git a/pipenv/vendor/requirementslib/models/setup_info.py b/pipenv/vendor/requirementslib/models/setup_info.py index 324a714b..7e604cc8 100644 --- a/pipenv/vendor/requirementslib/models/setup_info.py +++ b/pipenv/vendor/requirementslib/models/setup_info.py @@ -25,7 +25,7 @@ from distlib.wheel import Wheel from packaging.markers import Marker from pip_shims.utils import call_function_with_correct_args from six.moves import configparser -from six.moves.urllib.parse import unquote, urlparse, urlunparse +from six.moves.urllib.parse import urlparse, urlunparse from vistir.compat import FileNotFoundError, Iterable, Mapping, Path, finalize, lru_cache from vistir.contextmanagers import cd, temp_path from vistir.misc import run @@ -1893,7 +1893,7 @@ build-backend = "{1}" session = cmd._build_session(options) finder = cmd._build_package_finder(options, session) tempdir_manager = stack.enter_context(pip_shims.shims.global_tempdir_manager()) - vcs, uri = split_vcs_method_from_uri(unquote(ireq.link.url_without_fragment)) + vcs, uri = split_vcs_method_from_uri(ireq.link.url_without_fragment) parsed = urlparse(uri) if "file" in parsed.scheme: url_path = parsed.path diff --git a/pipenv/vendor/vendor.txt b/pipenv/vendor/vendor.txt index 205e794c..117553de 100644 --- a/pipenv/vendor/vendor.txt +++ b/pipenv/vendor/vendor.txt @@ -26,7 +26,7 @@ requests==2.23.0 idna==2.9 urllib3==1.25.9 certifi==2020.4.5.1 -requirementslib==1.5.14 +requirementslib==1.5.15 attrs==19.3.0 distlib==0.3.0 packaging==20.3