チケット #45822

savegame?.c: strlen(NULL)

登録: 2022-10-11 02:47 最終更新: 2023-05-04 10:22

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
2

詳細

Clang analyzer gives some warnings about strlen() being called with NULL string in savegame2.c and savegame3.c. I assume these to be some common pattern to be fixed as one bug.

チケットの履歴 (7 件中 3 件表示)

2022-10-11 02:47 更新者: cazfi
  • 新しいチケット "savegame?.c: strlen(NULL)" が作成されました
2022-10-11 03:23 更新者: cazfi
コメント

Reply To cazfi

I assume these to be some common pattern to be fixed as one bug.

The pattern is that there's a sg_failure_ret() macro checking that the string is not NULL, and then separate sg_failure_ret() macro using strlen() to check its length. Seems correct to me, i.e., the report to be a false positive.

2023-04-25 03:46 更新者: cazfi
コメント

Reply To cazfi

Reply To cazfi

I assume these to be some common pattern to be fixed as one bug.

The pattern is that there's a sg_failure_ret() macro checking that the string is not NULL, and then separate sg_failure_ret() macro using strlen() to check its length. Seems correct to me, i.e., the report to be a false positive.

Even more generic pattern: sg_failure_ret() macro checking something that should make sure that some latter code should not trip to NULL pointers or similar.

The problem with current sg_failure_ret() is in the order it does things in case of failure:
1. It sets sg_success to FALSE
2. It calls logging function
3. (via sg_check_ret() ) it returns if sg_success is FALSE

The problem here is that compiler/analyzer cannot be sure that the logging function call does not alter sg_success back to TRUE, and thus make sg_check_ret() to let execution to continue.

2023-04-25 03:50 更新者: cazfi
  • 担当者(未割り当て) から cazfi に更新されました
  • 解決法なし から 受領 に更新されました
  • マイルストーン(未割り当て) から 3.0.8 (完了済み) に更新されました
2023-05-04 10:22 更新者: cazfi
  • 状況オープン から 完了 に更新されました
  • 解決法受領 から 修正済み に更新されました

添付ファイルリスト

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする