Newlines in filenames

23

Eu entendo e aceito a premissa de que o shell script defensivo 1 é prudente e, no longo prazo, mais sustentável.

Muitas das respostas às perguntas de processamento de texto aqui seguem esse princípio construindo as respostas para contingências para nomes de arquivos não ortodoxos; que pode conter espaços, traços e novas linhas.

Qual a prevalência de novas linhas em nomes de arquivos? Especificamente:

  • Algum aplicativo cria nomes de arquivos que incluam novas linhas por padrão?
  • Existem situações em que seria desejável criar esses nomes de arquivos?
  • Ou eles são predominantemente uma instância de erro do usuário?

[1] Significando planejar e gerenciar o maior número possível de cenários e contingências ...

Pergunta inspirada no comentário (bastante melancólico) sobre esta questão .

    
por jasonwryan 24.10.2011 / 00:46

3 respostas

27

Eu nunca vi um nome de arquivo com uma nova linha diferente daqueles deliberadamente criados para testar aplicativos que manipulam nomes de arquivos. Nomes de arquivos contendo novas linhas podem aparecer porque:

  • Algum erro ou erro do usuário (por exemplo, uma cópia e colagem incorreta) resultou em um nome de arquivo indesejado.
  • Alguns danos no sistema de arquivos afetaram um nome de arquivo.
  • Alguém deliberadamente criou um nome de arquivo "estranho" para explorar uma falha de segurança, em que um aplicativo colocava mais confiança nos nomes de arquivo do que deveria ter.

O POSIX define um nome de arquivo como “um nome que consiste em 1 a {NAME_MAX} bytes usados para nomear um arquivo. Os caracteres que compõem o nome podem ser selecionados no conjunto de todos os valores de caractere, excluindo o caractere de barra e o byte nulo. Os nomes de arquivos dot e dot-dot têm um significado especial. ”Não há garantia de que todo sistema de arquivos aceita nomes de arquivos“ estranhos ”(os únicos garantidos são letras ASCII, dígitos, período, hífen e sublinhado , ou seja, A-Z , a-z , 0-9 e ._- , com o hífen proibido na primeira posição), mas a maioria dos sistemas de arquivos nativos dos unificados modernos faz.

    
por 24.10.2011 / 03:17
22

Ao escrever um artigo, muitas vezes eu coleciono uma bibliografia de arquivos PDF de várias fontes. Nem todos eles contêm os metadados corretos, o que significa que às vezes copio e colo o título do documento do visualizador de PDF no nome do arquivo. Isso geralmente resulta em novas linhas dentro do nome do arquivo, mas nunca foi um problema com as ferramentas que usei.

IMHO não há nada "defensivo" sobre a codificação de um padrão .. um padrão que afirma que as novas linhas são permitidas em nomes de arquivos. Se o seu script não lidar com todos os nomes de arquivos permitidos no padrão, o script está quebrado.

    
por 26.10.2011 / 04:45
2

Eu nunca vi usuários NORMAL usarem novas linhas em nomes de arquivos. Parece que sua finalidade principal é (1) tornar mais fácil para os atacantes subverter o seu sistema, e (2) tornar mais difícil escrever programas seguros :-(. No entanto, os gostos modernos do Unix (como o Linux) permitem , então você precisa se preparar para eles se quiser um programa que resista ao ataque.

"Nomes de arquivo e nomes de caminho no Shell: como fazer corretamente" mostra como lidar isso corretamente.

    
por 18.08.2013 / 22:19