[PATCH 1/6] msvcrt: Use LOCK_ENV locking in _chdrive and do validatation of input argument.

Alexandre Julliard julliard at winehq.org
Fri Aug 16 12:15:27 CDT 2013


Kai Tietz <ktietz70 at googlemail.com> writes:

> diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c
> index 44802b3..3b9e3c7 100644
> --- a/dlls/msvcrt/dir.c
> +++ b/dlls/msvcrt/dir.c
> @@ -365,14 +365,25 @@ int CDECL MSVCRT__chdrive(int newdrive)
>  {
>    WCHAR buffer[] = {'A', ':', 0};
>  
> +  if (newdrive < 1 || newdrive > 31)
> +  {
> +    *MSVCRT___doserrno () = ERROR_INVALID_DRIVE;
> +    *MSVCRT__errno () = MSVCRT_EACCES;
> +    return -1;
> +  }
>    buffer[0] += newdrive - 1;
> -  if (!SetCurrentDirectoryW( buffer ))
> +
> +  _lock (_ENV_LOCK);
> +
> +  if (!SetCurrentDirectoryW (buffer))
>    {
> -    msvcrt_set_errno(GetLastError());
> -    if (newdrive <= 0)
> -      *MSVCRT__errno() = MSVCRT_EACCES;
> +    msvcrt_set_errno (GetLastError ());
> +    _unlock (_ENV_LOCK);
>      return -1;
>    }
> +
> +  _unlock (_ENV_LOCK);
> +
>    return 0;
>  }

Please add test cases at least for the error values.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list