On 2016-06-28 21:21, hbelusca@svn.reactos.org wrote:
--- trunk/reactos/base/system/subst/subst.c [iso-8859-1] (original) +++ trunk/reactos/base/system/subst/subst.c [iso-8859-1] Tue Jun 28 19:21:08 2016 @@ -75,81 +75,71 @@ if (_tcslen(Drive) > 2) return FALSE;
- dwSize = sizeof(TCHAR) * MAX_PATH;
- lpTargetPath = (LPTSTR) malloc(sizeof(TCHAR) * MAX_PATH);
- if ( lpTargetPath)
- {
- dwSize = MAX_PATH;
- lpTargetPath = (LPTSTR)malloc(sizeof(TCHAR) * dwSize);
- if (!lpTargetPath)
return FALSE;- CharCount = QueryDosDevice(Drive,
lpTargetPath,dwSize);- while (!CharCount &&
GetLastError() == ERROR_INSUFFICIENT_BUFFER)- {
lpTargetPath = (LPTSTR)realloc(lpTargetPath, sizeof(TCHAR) * dwSize);
This is not how you use realloc, this causes a memory leak in case of failure. Also, why is there a cast here (also, for malloc above)?
Thanks. -Thomas
if (lpTargetPath){CharCount = QueryDosDevice(Drive,lpTargetPath,dwSize);}- }
- if (CharCount)
- {
Result = _tcsncmp(lpTargetPath, _T("\\??\\"), 4) == 0 &&( (lpTargetPath[4] >= _T('A') &&lpTargetPath[4] <= _T('Z')) ||(lpTargetPath[4] >= _T('a') &&lpTargetPath[4] <= _T('z')) );- }
- free(lpTargetPath);
- return Result;
+}