On 2016-06-28 21:21, hbelu...@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;
> +}


_______________________________________________
Ros-dev mailing list
Ros-dev@reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to