バグ : ファイルの属性を変更する

Posted: 2011年10月06日

ファイルの属性を変更する際のバグを紹介します。

具体的にファイルの属性とは、
読み取り専用や、隠しファイル、所有者などです。

プログラムプログラム:

 #include  <stdio.h>
 #include  <unistd.h>

 int main(int argc, char *argv[])
 {
    if (access(argv[1], 1) != 0) {
        // ファイルへアクセス権がない、ファイルが存在しない
        return -1;
    }

    SetFileAttributes(argv[1], FILE_ATTRIBUTE_HIDDEN);

    return 0;
 }

このプログラムにどのようなファイル操作関連のバグがあると思いますか?

  • ファイルの属性変更が成功したかチェックをしていない
  • 変更前の属性をすべて消し去っている

改善版プログラム改善版プログラム:

 #include  <stdio.h>
 #include  <unistd.h>

 int main(int argc, char *argv[])
 {
    if (access(argv[1], 1) != 0) {
        // ファイルへアクセス権がない、ファイルが存在しない
        return -1;
    }

    WORD dwAttr;
    dwAttr= GetFileAttributes(argv[1]);
    dwAttr = dwAttr & FILE_ATTRIBUTE_HIDDEN;
    if (SetFileAttributes(argv[1], dwAttr) == -1) {
        // 設定出来なかった場合
        return -1;
    }

    return 0;
 }
カテゴリー: バグ, プログラム | タグ: , , , | コメント無し »

コメント