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 标记了第 5 行,其中的 sizeof 应用于指针 ps。

修正代码示例

复制
  #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 行中显示了两个实例,在其中输入了正确的代码。