Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

socket.fromfd() leaks the dup()'d fd when family/type/proto are invalid

Aberta Para iniciantes
#160,561 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python

Direção de pesquisa

Comece lendo socket.fromfd() e seus testes no módulo socket do CPython; o issue não especifica nenhum arquivo nem teste, então localize-os pesquisando por fromfd. Reproduza a falha com valores inválidos de family, type ou proto e confirme que o descritor duplicado é fechado quando a construção gera uma exceção. O trabalho estará concluído quando o teste de regressão cobrir essas falhas e o descritor não vazar mais.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

type-bug
Bug report

socket.fromfd() duplicates the fd, then constructs the socket object.
If construction raises (TypeError/ValueError/OverflowError), the
duplicated fd is never closed.

Repro: attached confirm.py (Linux). It lowers RLIMIT_NOFILE and calls
socket.fromfd(fd, <bad family | bad type | huge proto>) repeatedly.

Result: each failing call leaks exactly one fd (10 leaks over 10
calls). A valid-args control leaks 0. Eventually any socket() call fails
with EMFILE.

Expected: the dup()'d fd is closed before the exception propagates.

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linguagem predominante
Python
Estrelas
77.7k
Forks
38.3k
Merge médio
12h 12min
PRs com merge (30d)
650

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de python/cpython

Todas as issues de python/cpython

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.