Problemas com nomes.
Certos recursos usados nos programas podem ter vários nomes, mesmo que o recurso seja um só.
Nestes casos devemos ter “formas usuais” (ou “canônicas”) perfeitamente definidas.
O problema é que devemos efetuar comparações sempre com a forma canônica e não com uma simples string antes de efetuar decisões de segurança como por exemplo liberar ou não o acesso a um recurso.
Suponha o seguinte problema: o diretório “c:\temp” minúsculo é o mesmo que o “C:\TEMP” maiúsculo? Se você estiver programando para Windows, a resposta é sim, mas as strings não são idênticas.
E o diretório “TEMP” é o mesmo? Neste diretório relativo teríamos que acrescentar o drive e diretório corrente antes de efetuar a comparação.
E o diretório “file://C:\TEMP”? Ele ‘eo mesmo, não é?
Observe que o problema é que temos vários nomes para o mesmo recurso. Nestes casos devemos sempre comparar a forma canônica e nunca a string em si.
Este problema ocorre com praticamente qualquer recurso que tenha um nome como arquivos, pastas e usuários.
Observe que podemos ter também questões ligadas a uso de caracteres acentuados.