CWARN.ALIGNMENT

可能错误的指针缩放

在 C 和 C++ 中,由于数学运算隐式缩放的方式,可能意外指向错误的内存。CWARN.ALIGNMENT 检查器可搜索指针可能未正确对齐的实例。

漏洞与风险

指针缩放错误可能导致缓冲区溢出状况。

漏洞代码示例

复制
 int buffer[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 int test1() {
 char *temp = (char *)buffer;
 int res = (int) (*(temp+6));
 return res;
 }

在此示例中,Klocwork 针对第 4 行发布 CWARN.ALIGNMENT 警告,因为可能存在指针缩放错误的情况。在此行中,“res”可能打算获得数组“buffer”的第七个元素,但是将 6 添加到变量“temp”中只会增加 6 个字节。在本例中,整数值提取自“buffer”第三个元素的中间。

修正代码示例

复制
 int buffer[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 int test1() {
 char *temp = (char *)buffer;
 int res = *((int*)temp+6);
 return res;
 }

在该修正代码示例中,通过编码可清楚知道,“res”指“buffer”的第七个元素。

安全培训

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