msdn里的代码也遍是错误啊

今天在看GetLogicalDriveStrings/QueryDosDevice这两个函数怎么用。结果在msdn的代码中发现一个缓冲区大小BUG。

我本机的msdn里,代码是这样的:

TCHAR szTemp[BUFSIZE];
szTemp[0] = '\0';

if (GetLogicalDriveStrings(BUFSIZE-1, szTemp))
{
  TCHAR szName[MAX_PATH];
  TCHAR szDrive[3] = TEXT(" :");
  BOOL bFound = FALSE;
  TCHAR* p = szTemp;
  do
  {
    // Copy the drive letter to the template string
    *szDrive = *p;

    // Look up each device name
    if (QueryDosDevice(szDrive, szName, BUFSIZE))

最后一行,QueryDosDevice的最后一个参数传错了,那个是szTemp的大小,正确的应该是MAX_PATH。而网上的msdn是对的。http://msdn.microsoft.com/en-us/library/aa366789.aspx

小小的汗一个。这样的代码出现在关键地方,又是一个安全漏洞吧

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥