[英]Buffer overrun comment from CODESONAR on stl::map iterator usage
....
wstring wstrFirst;
INFO_t* pstInfo = NULL;
INFO_MAP::const_iterator itrReqInfoEnd = RequestedInfoMap_i.end();
for( INFO_MAP::const_iterator itrReqInfo = RequestedInfoMap_i.begin();
itrReqInfo != itrReqInfoEnd;
++itrReqInfo )
{
wstrFirst = itrReqInfo->first;
pstInfo = itrReqInfo->second;
...
请参阅上面的代码片段。 我正在运行 CODESONAR(静态分析工具)。 我的问题是,在最后一行( pstInfo = itrReqInfo->second;
),CODESONAR 显示以下错误:
此代码读取超过 itrReqInfo-> 指向的缓冲区的末尾。
. itrReqInfo-> 计算为 &wstrFirst._Bx。
. 读取的第一个字节位于距 itrReqInfo-> 指向的缓冲区开头偏移 48 处,其容量为 48 个字节。
. 偏移量超过容量。
. 溢出发生在堆栈内存中。 如果突出显示的代码执行,则可能会出现此问题。
(此处突出显示的代码表示pstInfo = itrReqInfo->second;
)
是假阳性吗? 如果没有,我该如何解决?
由于itrReqInfo
是const_iterator
,而for
只是从头到尾遍历整个map
,因此看不到如何读取超出缓冲区限制的内容。 但需要确定此错误的更完整示例才能确定。
我在codesonar中报告了类似的问题,并使用“ const reference”修复了它。
在你的情况下,我会尝试这样的事情...
wstring wstrFirst;
INFO_MAP::const_iterator itrReqInfoEnd = RequestedInfoMap_i.end();
for( INFO_MAP::const_iterator itrReqInfo = RequestedInfoMap_i.begin();
itrReqInfo != itrReqInfoEnd;
++itrReqInfo )
{
wstrFirst = itrReqInfo->first;
const INFO_t& pstInfo = itrReqInfo->second;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.