c - 为什么 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, 0, 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 个字节)。
解决方案
推荐阅读
- spring-boot - 为什么 mstor 在 inbox.close() 上抛出 NotSerializableException
- ruby-on-rails - 在模块中扩展自我
- jquery - Jquery 步骤基本示例 - 字段未出现
- twitter-bootstrap - 引导排水沟
- asp.net-core - 使用 PuppeteerSharp 的 AspNet Core Razor 视图
- angular - mat-selection-list 不显示在 mat-autocomplete 中
- airflow - 如何屏蔽 Airflow 日志中的凭据?
- php - 在特定日期销售特定 Woocommerce 商品,在特定时间范围内销售其他商品
- sql - SQL查询3列,计数1并仅分组另一列
- python - 如何将 xarray MFdataset 转换为多个 geotiff?尝试了两种方法,到目前为止都失败了