windows環境でのファイル名


単体テストを行っています。

メソッドはパラメータとあるディレクトリのファイル名の先頭10桁が一致するファイルパスを返すというメソッド

ちなみにソースはこんな感じ

[code]

    private String getXmlFormatFilePath(String reportFormatId) {
    
        File directory = new File(XML_FILE_PATH);
        //ファイル一覧を取得し名前だけを取得
        File[] fileList = directory.listFiles();
        //ファイルの一覧の情報を取得する
        for(File fileInfo: fileList){
    
            String fileName = fileInfo.getName();
                //帳票IDとファイル名の先頭10桁が一致するものを抽出
                if(fileName.startsWith(reportFormatId.substring(0,10))){
    
                //ディレクトリのパスとファイル名を合わせてreturnする
                return directory+XML_FILE_PATH_KUGIRI+fileName;
            }
    
        }
        //TODO
        throw new SystemException(MSG_KEY_SC, "帳票IDとファイル名の先頭10桁が一致するファイルがありません");
    }
    
[/code]

この場合の異常系でreportFormatIdに特殊文字(\n等のエスケープシーケンス)が入力された場合を検証しますが  
そもそもWindowsのファイル名をつける際に改行やタブ等が存在するのでしょうか？  
私個人的には存在しないと思っていて、存在しないのであればエスケープシーケンスの検証は必要ない(どちらにせよエラーになるのだから)と思っております。

皆様はどう思いますか？  
また、同じような理由でファイルを作成する機能がありそこにエスケープシーケンスが入力された場合も作成できないでエラーになるなるので必要ないかなと思いますがどうでしょう？




ファイルパスに制御文字はエラーとなりますが、引数のreportFormatIdに対して許可する文字列のチェックを行わない場合、以下の様な値も許可してしまうでしょう。

`../(対象フォルダの親フォルダにあるフォルダ名やファイル名)`

reportFormatIdに入ってくる値が、例えば「帳票IDに入力できる文字列以外は入力できない」とすでに制限されていれば問題はないのですが、これはディレクトリトラバーサルと類似する問題です。  
ファイルを探索する処理では、値のチェックは必要でしょう。

