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 不会进行报告,因为在复制操作过程中,源字符串将剪裁为目标缓冲区大小。