微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么 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 举报,一经查实,本站将立刻删除。