python / python/cpython

`shlex.push_source()` fails to reset lexer state, causing new stream to be ignored if called after EOF

Aberta
#140,950 2 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

stdlib type-bug
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

Bug report

Bug description:

Calling shlex.push_source() after the current input has reached EOF leaves the lexer in state == None, so the newly pushed source is never read. Subsequent get_token() calls immediately return EOF instead of consuming the new input.

from shlex import shlex

lexer = shlex('a')
print(lexer.get_token())
print(lexer.get_token())  # EOF -> state is None

lexer.push_source('b', None)
print(lexer.get_token())  # actural '' (EOF), expected: 'b'
a


CPython versions tested on:

3.12

Operating systems tested on:

Linux

Linked PRs
  • gh-144560
  • gh-150172

Guia de contribuição

Abrir o guia de contribuição

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.

Direção de pesquisa

Comece pelo ponto de entrada shlex.shlex e reproduza a sequência relatada: consuma a entrada inicial até EOF, chame push_source('b', None) e, em seguida, leia o próximo token. Está concluído quando a fonte recém-adicionada é consumida em vez de retornar EOF; adicione ou atualize a cobertura de regressão para essa sequência e execute os testes relevantes de shlex.

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

Avaliação

Stack de tecnologia
python
Domínio
cli
Tipo de issue
Bug
Dificuldade
2/5
Tempo estimado
1-3 horas
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

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