Skip to content

fix: handle tags like debian/2%2.6-21 as identifiers#1336

Merged
nejch merged 1 commit intopython-gitlab:masterfrom
emanueleaina:fix/quote-everything
Mar 6, 2021
Merged

fix: handle tags like debian/2%2.6-21 as identifiers#1336
nejch merged 1 commit intopython-gitlab:masterfrom
emanueleaina:fix/quote-everything

Conversation

@emanueleaina
Copy link
Contributor

@emanueleaina emanueleaina commented Feb 26, 2021

Git refnames are relatively free-form and can contain all sort for
special characters, not just / and #, see
http://git-scm.com/docs/git-check-ref-format

In particular, Debian's DEP-14 standard for storing packaging in git
repositories mandates the use of the % character in tags in some
cases like debian/2%2.6-21.

Unfortunately python-gitlab currently only escapes / to %2F and in
some cases # to %23. This means that when using the commit API to
retrieve information about the debian/2%2.6-21 tag only the slash is
escaped before being inserted in the URL path and the % is left
untouched, resulting in something like
/api/v4/projects/123/repository/commits/debian%2F2%2.6-21. When
urllib3 sees that, it detects the invalid % escape and then urlencodes
the whole string, resulting in
/api/v4/projects/123/repository/commits/debian%252F2%252.6-21, where
the original / got escaped twice and produced %252F.

To avoid the issue, fully urlencode identifiers and parameters to avoid
the urllib3 auto-escaping in all cases.

I've run the unit tests but not the integration ones, so in theory this does
not break anything but I can't really confirm it. All I can firmly say is that it
fixes the issue I hit. :D

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants