Gentoo Archives: gentoo-portage-dev

From: Mike Gilbert <floppym@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Mike Gilbert <floppym@g.o>
Subject: [gentoo-portage-dev] [PATCH] Improve handling of percent-signs in SRC_URI
Date: Sun, 31 May 2020 13:17:23
Message-Id: 20200531131705.4174920-1-floppym@gentoo.org
1 Unquote the URL basename when fetching from upstream.
2 Quote the filename when fetching from mirrors.
3
4 Bug: https://bugs.gentoo.org/719810
5 Signed-off-by: Mike Gilbert <floppym@g.o>
6 ---
7 lib/portage/dbapi/porttree.py | 7 ++++++-
8 lib/portage/package/ebuild/fetch.py | 9 +++++++--
9 2 files changed, 13 insertions(+), 3 deletions(-)
10
11 diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
12 index 08af17bcd..984263039 100644
13 --- a/lib/portage/dbapi/porttree.py
14 +++ b/lib/portage/dbapi/porttree.py
15 @@ -55,6 +55,11 @@ try:
16 except ImportError:
17 from urlparse import urlparse
18
19 +try:
20 + from urllib.parse import unquote as urlunquote
21 +except ImportError:
22 + from urllib import unquote as urlunquote
23 +
24 if sys.hexversion >= 0x3000000:
25 # pylint: disable=W0622
26 basestring = str
27 @@ -1547,7 +1552,7 @@ def _parse_uri_map(cpv, metadata, use=None):
28 myuris.pop()
29 distfile = myuris.pop()
30 else:
31 - distfile = os.path.basename(uri)
32 + distfile = urlunquote(os.path.basename(uri))
33 if not distfile:
34 raise portage.exception.InvalidDependString(
35 ("getFetchMap(): '%s' SRC_URI has no file " + \
36 diff --git a/lib/portage/package/ebuild/fetch.py b/lib/portage/package/ebuild/fetch.py
37 index 28e7caf53..47c3ad28f 100644
38 --- a/lib/portage/package/ebuild/fetch.py
39 +++ b/lib/portage/package/ebuild/fetch.py
40 @@ -26,6 +26,11 @@ try:
41 except ImportError:
42 from urlparse import urlparse
43
44 +try:
45 + from urllib.parse import quote as urlquote
46 +except ImportError:
47 + from urllib import quote as urlquote
48 +
49 import portage
50 portage.proxy.lazyimport.lazyimport(globals(),
51 'portage.package.ebuild.config:check_config_instance,config',
52 @@ -351,7 +356,7 @@ _size_suffix_map = {
53
54 class FlatLayout(object):
55 def get_path(self, filename):
56 - return filename
57 + return urlquote(filename)
58
59 def get_filenames(self, distdir):
60 for dirpath, dirnames, filenames in os.walk(distdir,
61 @@ -382,7 +387,7 @@ class FilenameHashLayout(object):
62 c = c // 4
63 ret += fnhash[:c] + '/'
64 fnhash = fnhash[c:]
65 - return ret + filename
66 + return ret + urlquote(filename)
67
68 def get_filenames(self, distdir):
69 pattern = ''
70 --
71 2.27.0.rc2

Replies