[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 13:20:08 CDT 2013


Kai Tietz <ktietz70 at googlemail.com> writes:

> 2013/8/16 Alexandre Julliard <julliard at winehq.org>:
>> 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
>
> Ok, adjusted patch attached.

Please send all patches to wine-patches otherwise they don't go into the
patch queue.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list