簡體   English   中英

CODESONAR 關於 stl::map 迭代器使用的緩沖區溢出注釋

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

是假陽性嗎? 如果沒有,我該如何解決?

由於itrReqInfoconst_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM