IUn*_*ter 11 c++ static static-analysis const global-variables
我试图在网站上搜索这个问题但是并没有找到这个问题,尽管这个问题正在讨论很多......
我在cpp文件中有这个声明,而不是在任何函数中:
static const char* gText = "xxxxxxxxxxx";
Run Code Online (Sandbox Code Playgroud)
虽然它有一个固定的大小,但当我试图将它复制到另一个char*变量时,我会收到静态分析工具(Klocwork)的警告 - 关于可能的越界违规:
char xText[32];
SecureZeroMemory(xText, 32);
memcpy(xText, gText, strlen(gText));
Run Code Online (Sandbox Code Playgroud)
它是假阳性还是后来初始化的全局变量?
谢谢!
这是误报。strlen可能被抽象为返回一个未知的正数,因此在分析模式时,memcpy(dest,src,strlen(src));分析器不会意识到副本的读取部分是安全的,只要src是格式良好的字符串。
如果您使用strcpy,分析器可能会认为在这种情况下没问题。你有理由不这样做吗?该函数strcpy被认为是“不安全”的,但你的memcpy(..,src,strlen(src))也很不安全。
编辑:此外,sellibitze 在评论中提出了一个非常好的观点:const原始代码中的属性仅适用于所指向的字符gText,而不适用于其gText本身。