为什么 SAL 将此循环报告为潜在的缓冲区溢出?

问题描述

// Global:
const WCHAR g_Table[] = L"AbCdEfGhIjKlMnopQrStUvWxYzaBcDeFgHiJkLmnopqRsTuVwXyZ2468013579";


// In function:
void myFunction()
{
    WCHAR *randomFileName = NULL;

    size_t cchFileName = 7 + (rand() % 7);
    randomFileName = HeapAlloc(hHeap,HEAP_ZERO_MEMORY /*Automatically takes care of null terminator*/,(cchFileName + 1) * sizeof(WCHAR));

    if (NULL == randomFileName)
    {
        goto cleanup;
    }
    
    
    for (i = 0; i < cchFileName; i++)
    {
        randomFileName[i] = g_Table[rand() % _countof(g_Table)];
    }
    
    //use(randomFileName);        

cleanup:
    if (randomFileName != NULL)
    {
        HeapFree(hHeap,randomFileName); 
    }
}

SAL 报告:

warning C6386: Buffer overrun while writing to 'randomFileName':  the writable size is '((cchFileName+1))*sizeof(WCHAR)' bytes,but '4' bytes might be written.

这只是 SAL 中的一个错误吗?或者我在这里缺少什么? cchFileName 显然超过 2 个 WCHAR(即 4 个字节)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)