apache / apache/libcloud

Tilde ('~') character is incorrectly URL-encoded with Python 2

Abierto
#1,452 6 comentarios 0 reacciones 0 asignados Ver en GitHub
api: http layer potential 2.8.x candidate python 2.x and 3.x compatibility stale
Lenguaje dominante
Python
Estrellas
2.1k
Forks
931
Merge medio
1 d 2 h
PR fusionados (30 d)
4

Descripción

I'm referring to the older, unresolved issue here (it seems I cannot create a new issue nor comment on the older one over at issues.apache.org though I have a long-time user there...):

https://issues.apache.org/jira/browse/LIBCLOUD-979

I can confirm that the reported issue happens also for Amazon S3, not only for CEPH as originally reported. And the problem is indeed that libcloud URL-encodes the tilde '~' sign to '%7E', which it shouldn't according to RFC 3986.

The problem seems specific to Python 2 because in Python 3 urllib.quote() has been already updated to not URL-encode the tilde '~' sign anymore:

https://bugs.python.org/issue16285

Because of this, I think the correct fix (other than the patch proposed in LIBCLOUD-979) would be adding the tilde '~' character to the safe characters in the urlquote() utility function in utils/py3.py to ensure consistent behavior between Python 2 and Python 3.

```diff
--- libcloud/utils/py3.py 2020-04-30 12:58:55.804591828 +0000
+++ libcloud_fixed/utils/py3.py 2020-04-30 12:59:25.975368813 +0000
@@ -211,7 +211,7 @@

tostring = ET.tostring

- def urlquote(s, safe='/'):
+ def urlquote(s, safe='/~'):
if isinstance(s, _real_unicode):
# Pretend to be py3 by encoding the URI automatically.
s = s.encode('utf8')
```

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comience en la utilidad urlquote() de utils/py3.py y compare su comportamiento en Python 2 con Python 3 y RFC 3986. El trabajo estará terminado cuando los caracteres de tilde permanezcan sin codificar de forma coherente en ambas versiones de Python, incluido el caso de Amazon S3 descrito en el issue.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
backend
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.