[英]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.