CWARN.MEMSET.SIZEOF.PTR

'sizeof' を持つ memset のような関数がポインターに適用されます

CWARN.MEMSET.SIZEOF.PTR チェッカーは、ポイントされたオブジェクトの代わりにポインターに sizeof が適用されている memset 型関数にフラグを立てます。

脆弱性とリスク

memset 関数に不適切なサイズが渡されると、呼び出しによって間違ったバイト数が入力されます。このような状況は、バッファオーバーフローのような脆弱性をもたらす場合があります。

脆弱コード例

コピー
  #include <memory.h>
  struct S {
    int x, y;
  };
    void zero_S(struct S *ps) {
    memset(ps, 0, sizeof(ps));
  }

この例では、Klocwork は、ポインター ps に sizeof が適用されている 5 行目にフラグを立てます。

修正コード例

コピー
  #include <memory.h>
  struct S {
     int x, y;
  };
  void zero_S(struct S *ps) {
    memset(ps, 0, sizeof(*ps));     
    memset(ps, 0, sizeof(struct S));
  }

修正例では、コードが正しく入力されている 6 行目と 7 行目の 2 つのインスタンスを示します。