[PATCH] D38570: Support: Rewrite Windows implementation of sys::fs::rename to be more POSIXy.

Adrian McCarthy via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 9 10:52:13 PDT 2017


Committed in r315222.

On Mon, Oct 9, 2017 at 10:43 AM, Adrian McCarthy <amccarth at google.com>
wrote:

> That's my plan.
>
> On Mon, Oct 9, 2017 at 10:41 AM, Peter Collingbourne <peter at pcc.me.uk>
> wrote:
>
>> HI Adrian,
>>
>> If that fix works for you, would you mind checking it in?
>>
>> Peter
>>
>> On Mon, Oct 9, 2017 at 10:35 AM, Adrian McCarthy <amccarth at google.com>
>> wrote:
>>
>>> I just came across this, too.  I'm testing this fix:
>>>
>>> std::copy(ToWide.begin(), ToWide.end(), &RenameInfo.FileName[0]);
>>>
>>> which makes the target argument a plain old pointer rather than an array
>>> of length 1.
>>>
>>> On Mon, Oct 9, 2017 at 10:13 AM, George Rimar via Phabricator <
>>> reviews at reviews.llvm.org> wrote:
>>>
>>>> grimar added inline comments.
>>>>
>>>>
>>>> ================
>>>> Comment at: llvm/trunk/lib/Support/Windows/Path.inc:375
>>>> +  RenameInfo.FileNameLength = ToWide.size();
>>>> +  std::copy(ToWide.begin(), ToWide.end(), RenameInfo.FileName);
>>>> +
>>>> ----------------
>>>> This asserts under windows/debug.
>>>> `RenameInfo.FileName` here is `WCHAR  FileName[1];` and std::copy
>>>> checks it's size
>>>> for overflow and fails:
>>>>
>>>> ```
>>>>         _Myiter& operator+=(difference_type _Off)
>>>>                 {       // increment by integer
>>>>  #if _ITERATOR_DEBUG_LEVEL == 2
>>>>                 if (_Size < _Idx + _Off)
>>>>                         {       // report error
>>>>                         _DEBUG_ERROR("array iterator + offset out of
>>>> range");
>>>>                         _SCL_SECURE_OUT_OF_RANGE;
>>>>                         }
>>>> ```
>>>>
>>>> ```
>>>> template<class _InIt,
>>>>         class _OutTy,
>>>>         size_t _OutSize> inline
>>>>         _OutTy *copy(_InIt _First, _InIt _Last,
>>>>                 _OutTy (&_Dest)[_OutSize])
>>>>         {       // copy [_First, _Last) to [_Dest, ...)
>>>> ```
>>>>
>>>> I would suggest to use memcpy instead.
>>>>
>>>>
>>>> Repository:
>>>>   rL LLVM
>>>>
>>>> https://reviews.llvm.org/D38570
>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>> --
>> --
>> Peter
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171009/a3b72f65/attachment.html>


More information about the llvm-commits mailing list