SV.STRBO.BOUND_COPY.OVERFLOW

绑定字符串复制中的缓冲区溢出

SV.STRBO.BOUND_COPY.OVERFLOW 检查器可查找绑定字符串复制操作(strncpy、StrnCpy、safe_strcpy)中可能的缓冲区溢出。

漏洞与风险

在字符串复制操作期间发生缓冲区溢出时,它会覆盖相邻的内存。这将导致违反内存安全规定。

要避免这种错误,应正确计算目标缓冲区大小,并且绑定字符串复制函数的第三个参数应小于或等于缓冲区大小。

漏洞代码示例

复制
 #include <string.h>
 int main(int argc, char* argv[]){
   char foo[10];
   char bar[] = "this text is too long";
   strncpy(foo, bar, sizeof(bar));
 }

Klocwork 将在第 5 行报告缺陷 SV.STRBO.BOUND_COPY.OVERFLOW,因为目标缓冲区大小 10 小于源缓冲区大小 22。

修正代码示例 1

复制
#include <string.h>
int main(int argc, char* argv[]){
  char foo[10];
  char bar[] = "this text is too long";
  strncpy(foo, bar, sizeof(foo));
}

在此示例中,缺陷 SV.STRBO.BOUND_COPY.OVERFLOW 不会进行报告,因为在复制操作过程中,源字符串将剪裁为目标缓冲区大小。

相关检查器

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。