[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