CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN
当全局变量仅由一个函数使用时,CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN 检查器会报告缺陷。
漏洞与风险
定义可见性超出所需范围的变量会增加变量被意外使用的几率。
缓解与预防
尽可能将变量的范围或可见性限制到所需的所有引用的程度。例如,如果某个变量仅由一个函数使用,那么我们可以将该变量声明为局部变量。
漏洞代码示例
复制
unsigned int a = 0; // CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN //
void f0()
{
if (a++ > 10) return;
/* … */
}
void f1()
{
/* … */
}
在此示例中,变量“a”被声明为全局变量,但仅在函数 f0() 中使用。
修正代码示例
复制
void f0()
{
static unsigned int a = 0;
if (a++ > 10) return;
/* … */
}
void f1()
{
/* … */
}
在修正代码示例中,我们在函数的范围内声明变量“a”。添加静态关键字可确保在每次调用 f0() 时都不会重置变量。
相关检查器
- CXX.ID_VIS.GLOBAL_VARIABLE.STATIC
- MISRA.VAR.MIN.VIS