`test_file` failed on Windows with a longer repo path in `test_urllib2`
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
On Windows, when the CPython repository is cloned to a slightly longer path, for example, C:\Users\xxxxx\Source\cpython — this test case will fail:
ERROR: test_file (test.test_urllib2.HandlerTests.test_file)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\xxxxx\Source\cpython\Lib\encodings\idna.py", line 219, in encode
result.extend(ToASCII(label))
~~~~~~~^^^^^^^
File "C:\Users\xxxxx\Source\cpython\Lib\encodings\idna.py", line 115, in ToASCII
raise UnicodeEncodeError("idna", label, 0, len(label), "label too long")
UnicodeEncodeError: 'idna' codec can't encode characters in position 0-64: label too long
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\xxxxx\Source\cpython\Lib\test\test_urllib2.py", line 872, in test_file
self.assertRaises(urllib.error.URLError,
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
h.file_open, Request(url))
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxx\Source\cpython\Lib\unittest\case.py", line 813, in assertRaises
return context.handle('assertRaises', args, kwargs)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxx\Source\cpython\Lib\unittest\case.py", line 247, in handle
callable_obj(*args, **kwargs)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxx\Source\cpython\Lib\urllib\request.py", line 1469, in open_local_file
localfile = url2pathname(req.full_url, require_scheme=True)
File "C:\Users\xxxxx\Source\cpython\Lib\urllib\request.py", line 1658, in url2pathname
if not _is_local_authority(authority):
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "C:\Users\xxxxx\Source\cpython\Lib\urllib\request.py", line 1498, in _is_local_authority
address = socket.gethostbyname(authority)
File "C:\Users\xxxxx\Source\cpython\Lib\encodings\idna.py", line 222, in encode
raise UnicodeEncodeError(
...<5 lines>...
)
UnicodeEncodeError: 'idna' codec can't encode characters in position 8-72: label too long
encoding with 'idna' codec failed
These two URLs will become:
file://127.0.0.1:80C:\Users\xxxxx\Source\cpython\build\test_python_worker_17208æ/@test_17208_tmpæfile://somerandomhost.ontheinternet.comC:\Users\xxxxx\Source\cpython\build\test_python_worker_4676æ/@test_4676_tmpæ
Here, 127.0.0.1:80C:\Users\xxxxx\Source\cpython\build\test_python_worker_17208æ is treated as the domain and passed to socket.gethostbyname. However, the part 1:80C:\Users\xxxxx\Source\cpython\build\test_python_worker_17208æ is too long to be a valid domain label. As a result, the idna codec raises an exception, indicating the label is too long.
A patch is on the way.
Linked PRs
- gh-133449
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece em Lib/test/test_urllib2.py, próximo de test_file, especialmente na configuração da URL perto das linhas 857-860 e na asserção perto da linha 872. Execute test.test_urllib2.HandlerTests.test_file no Windows com um caminho de checkout mais longo e compare a URL e a exceção resultantes. Está concluído quando o teste não falhar mais nesse ambiente, mantendo sua asserção URLError pretendida.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- testing-qa
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 15/100