タグ

ProgrammingとJPCERTに関するItisangoのブックマーク (2)

  • FIO03-C. fopen() やファイル作成時の動作について勝手な想定をしない

    FIO03-C. fopen() やファイル作成時の動作について勝手な想定をしない C の fopen() 関数を使用して、既存のファイルをオープンしたり新規ファイルを作成することができる。C11 バージョンの fopen() と fopen_s() では、モードフラグ x を提供している。このフラグは、オープンしようとしているファイルが存在するかどうかの判断に必要なメカニズムを提供する。このモードフラグを使用しないと、意図しないファイルへの上書きやアクセスを行う可能性がある。 違反コード (fopen()) 以下のコード例では、file_name が参照するファイルを書き込み用にオープンしている。プログラマの意図がファイルの新規作成であり、参照先のファイルがすでに存在している場合には、このコード例は違反コードである。 char *file_name; FILE *fp; /* file_

    FIO03-C. fopen() やファイル作成時の動作について勝手な想定をしない
  • NUM00-J. 整数オーバーフローを検出あるいは防止する

    Java の型において表現できる値の範囲は非対称(最小値の符号を反転させた値は、最大値より1大きい)であるため、単項マイナス演算子を最小値に適用した場合には整数オーバーフローが発生する。引数の絶対値を返すメソッド java.lang.math.abs() に int 型や long 型の最小値を与えた場合にも、整数オーバーフローが発生する。 数学的演算の結果が与えられた整数型で表現できない場合、Java のビルトイン演算子は、オーバーフローの発生を示すことなく演算結果をラップアラウンドさせる。この動作は、間違った計算結果や予期せぬ結果を招く可能性がある。たとえば、実システムにおいて、オーバーフローを適切に扱わなかったために compareTo メソッドの実装で問題となった例がある。compareTo メソッドの返り値は、ゼロであるか、符号が正負いづれかであるかにだけ意味があり、その絶対値に

    NUM00-J. 整数オーバーフローを検出あるいは防止する
    Itisango
    Itisango 2020/02/24
    "いかなる場合であっても、組み込みの整数演算子がオーバーフローやアンダーフローを起こすことはない。" 知らんかった! #Java
  • 1