脆弱なコードの改善

概要

FrontISTRのC言語およびFortranソースコードに、バッファオーバーフロー、メモリリーク、未チェックのエラーなど、複数のセキュリティ上の脆弱性・堅牢性の問題が存在します。本Issueでは、これらを体系的に修正します。

背景

静的解析やコードレビューにより、以下のカテゴリに該当する問題が多数確認されました。これらは通常の使用では顕在化しにくいものの、予期しない入力や大規模計算時にクラッシュ・データ破壊・セキュリティリスクにつながる可能性があります。

修正内容

1. sprintf → snprintf への置換(C言語・約120箇所)

sprintf はバッファサイズを考慮しないため、書き込み先のバッファを超過する潜在的なバッファオーバーフローの危険があります。snprintf に置換し、sizeof でバッファサイズを明示的に制限します。

対象モジュール: hecmw_control.c, hecmw_dist_refine.c, hecmw_visualizer.c, hecmw_vis_*.c, hecmw_dlb_*.c, fstr_ctrl_util.c 等

2. バッファサイズの拡張(C/Fortran)

ランク番号やステップ番号を含むファイル名・文字列の組み立てに使われるバッファが小さすぎ、大規模並列実行時にオーバーフローする恐れがあります。

  • C: char prefix[10] → char prefix[32]、char subname[10] → char subname[32] 等
  • Fortran: character(len=4) :: cnum → character(len=12)、character(len=6) :: clyr → character(len=16) 等

3. メモリアロケーションのエラーチェック追加(Fortran)

allocate 文に stat= 引数を追加し、失敗時にエラーメッセージを出力して適切に異常終了するようにします。

対象: fstr_setup.f90, readtemp.f90, bucket_search.f90 等

4. ファイルオープンのエラーチェック追加(Fortran)

open 文に iostat= 引数を追加し、ファイルオープン失敗時のエラーハンドリングを追加します。

対象: fistr_main.f90, fstr_precheck.f90, fstr_frequency_analysis.f90, fstr_setup.f90 等

5. メモリリーク・リソースリークの修正(C)

エラーパスでの fclose・free 漏れを修正し、リソースリークを防止します。

対象: hecmw_ablex.c, hecmw_dlb_*.c, hecmw_vis_*.c, fstr_rmerge_util.c 等

6. 解放前のNULLチェック追加(Fortran)

deallocate の前に associated() チェックを追加し、未割り当てポインタの解放によるランタイムエラーを防止します。

対象: fstr_rcap_io.F90

7. Fortranフォーマット文字列の修正

書式指定子内のカンマ欠落('(''####''a80)' → '(''####'',a80)')を修正します。

対象: fistr_main.f90

対応MR

Edited by Kanato Kono