Re: SynView 中SymMgr.cpp 中有一个缓冲区溢出的bug
《软件调试》勘误和意见
SynView 中SymMgr.cpp 中有一个缓冲区溢出的bug
最爱捉虫
2011-05-06, 11:15 上午
在 SymMgr.cpp 中
HRESULT CSymMgr::ListAppend(HWND hWndList, IDiaSourceFile * pSourceFile)
{
HRESULT hr=S_OK;
TCHAR szText[MAX_PATH];
DWORD dwData;
LV_ITEM lvI; // list view item structure
int row=0x7FFFFFFF;
BSTR wszText;
LONG lData;
IDiaEnumSymbols * pEnum;
IDiaSymbol *pSymbol;
LPTSTR lpsz;
hr=pSourceFile->get_uniqueId(&dwData);
if(FAILED(hr))
return hr;
...
TCHAR szText[MAX_PATH]; MAX_PATH 过小。当我点击附件中的SourceFiles的时候,程序 Crash 了. 堆栈跟踪不了,因此判断缓冲区
过小,将 szText 缓冲区修改为 2048 就 OK 了。
但是 szText 最大长度到底多长合适呢? 动态分配 ?
Re: SynView 中SymMgr.cpp 中有一个缓冲区溢出的bug
格蠹老雷
2011-05-07, 13:50 下午
是的,这段代码是有溢出的问题,根据文档,目前最长的字段是290,所以可以定义成MAX_PATH*2,更好的办法是使用snprintf()函数,指定缓冲区的长度。记得修改过这个bug,忘记更新到网站了,多谢提出