python-hyper / python-hyper/rfc3986
The first path segment is unexpectedly interpreted as an authority after normalization
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 189
- Forks
- 38
- Merge medio
- 13 h 36 min
- PR fusionados (30 d)
- 1
Descripción
scheme:/..///barhas scheme="scheme", authority=None, path=/..///bar.
However, after normalization, it has scheme="scheme", authority="bar".- Consider t1 as an IRI
..///barresolved againstscheme:.
t1 should have scheme="scheme"and authority=None(since..///bardoes not contain authority).
However, resulting string isscheme://bar, it has authority=bar.
And some more examples:
$ python
Python 3.9.9 (main, Jan 10 2022, 18:52:39)
[GCC 11.2.1 20211127] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from rfc3986 import uri_reference
>>> b = uri_reference('scheme:')
>>> r1 = uri_reference('..///bar')
>>> t1 = r1.resolve_with(b)
>>> t1
URIReference(scheme='scheme', authority=None, path='//bar', query=None, fragment=None)
>>> t1.unsplit()
'scheme://bar'
>>> r2 = uri_reference('/..///bar')
>>> r2.resolve_with(b)
URIReference(scheme='scheme', authority=None, path='//bar', query=None, fragment=None)
>>> uri_reference('scheme:/..///bar').normalize()
URIReference(scheme='scheme', authority=None, path='//bar', query=None, fragment=None)
>>> uri_reference('scheme:/..///bar').normalize().unsplit()
'scheme://bar'
I'm not sure how this should handled.
Collapsing the // at the beginning is not explicitly allowed by RFC 3986, so I think the normalization and the resolution cannot produce valid output and should fail in this case.
(But RFC 3986 does not seem to state that they can fail!)
This can caused by normalization during resolution, so #84 may also be affected by this issue.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el punto de entrada uri_reference() y sigue normalize(), resolve_with() y unsplit() utilizando los ejemplos del issue y las reglas de RFC 3986 que citan. Determina cómo deben manejarse las barras diagonales dobles iniciales cuando no hay authority, incluida la interacción señalada con el issue #84. Se considerará terminado cuando el comportamiento previsto esté especificado y los ejemplos ya no reinterpreten el primer segmento de la ruta como una authority.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend-api-design
- Tipo de issue
- Error
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100