Cadeia de caracteres específica trava [ [[

3

Enquanto teste de fuzz descobri que é possível, definindo

var=$'5\'

, para fazer os dois comandos a seguir (usados para remover tudo até a última nova linha) desligue indefinidamente, consumindo 100% da CPU no Bash 4.2.25 (1) -release (x86_64-pc -linux-gnu):

[ -n "${var##*$'\n'}" ]
[[ -n "${var##*$'\n'}" ]]

O processo runaway bash não pode ser interrompido com SIGINT ( Ctrl - C ou kill -SIGINT $pid ) ou SIGTERM , mas tem que ser morto com SIGKILL .

Eu tentei inspecionar o valor usando

uniname -bcp <<<"$var"

mas isso também trava. uniname , no entanto, é eliminável com SIGINT .

Também verifiquei alguns outros comandos básicos, mas todos funcionam bem:

echo "$var"
printf '%q\n' "$var"
touch -- "$var"
rm -- "$var"

O que está acontecendo aqui? Isso é reproduzível por outros? E esse comportamento é definido?

    
por l0b0 30.05.2013 / 10:03

1 resposta

7

Isso é um bug em bash-4.2 até o patch 29 em localidades UTF-8 relacionadas a globbing com strings contendo caracteres UTF-8 inválidos (que 5\ é).

Você também pode reproduzi-lo com:

: *$'5x'

Isso foi corrigido no patch 30 , veja a descrição do patch e < a href="http://thread.gmane.org/gmane.comp.shells.bash.bugs/16274"> discussão da lista de discussão para detalhes.

    
por 30.05.2013 / 13:55

Tags