[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cfe-commits
Subject:    Re: [libcxx] r238666 - Don't try to memcpy zero bytes; sometimes the source pointer is NULL,
From:       David Majnemer <david.majnemer () gmail ! com>
Date:       2015-05-31 8:48:54
Message-ID: CAL7bZ_eDTtZMQWWx37rPjeOPp=qcRcs+iBMUR6P7O1Kpwr+_qg () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


On Sat, May 30, 2015 at 8:13 PM, Marshall Clow <mclow.lists@gmail.com>
wrote:

> Author: marshall
> Date: Sat May 30 22:13:31 2015
> New Revision: 238666
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=238666&view=rev
> Log:
> Don't try to memcpy zero bytes; sometimes the source pointer is NULL, and
> that's UB. Thanks to Nuno Lopes for the catch.
> 
> Modified:
> libcxx/trunk/include/memory
> 
> Modified: libcxx/trunk/include/memory
> URL:
> http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?rev=238666&r1=238665&r2=238666&view=diff
>  
> ==============================================================================
> --- libcxx/trunk/include/memory (original)
> +++ libcxx/trunk/include/memory Sat May 30 22:13:31 2015
> @@ -621,6 +621,8 @@ void* align(size_t alignment, size_t siz
> #pragma GCC system_header
> #endif
> 
> +extern "C" int printf(const char * __restrict, ...);
> +
> 

Was this change intentional?


> _LIBCPP_BEGIN_NAMESPACE_STD
> 
> // addressof moved to <__functional_base>
> @@ -1521,7 +1523,8 @@ struct _LIBCPP_TYPE_VIS_ONLY allocator_t
> __construct_forward(allocator_type& __a, _Tp* __begin1, _Tp*
> __end1, _Tp*& __begin2)
> {
> ptrdiff_t _Np = __end1 - __begin1;
> -            _VSTD::memcpy(__begin2, __begin1, _Np * sizeof(_Tp));
> +            if (_Np > 0)
> +                _VSTD::memcpy(__begin2, __begin1, _Np * sizeof(_Tp));
> __begin2 += _Np;
> }
> 
> @@ -1549,7 +1552,8 @@ struct _LIBCPP_TYPE_VIS_ONLY allocator_t
> {
> typedef typename remove_const<_Tp>::type _Vp;
> ptrdiff_t _Np = __end1 - __begin1;
> -            _VSTD::memcpy(const_cast<_Vp*>(__begin2), __begin1, _Np *
> sizeof(_Tp));
> +            if (_Np > 0)
> +                _VSTD::memcpy(const_cast<_Vp*>(__begin2), __begin1, _Np *
> sizeof(_Tp));
> __begin2 += _Np;
> }
> 
> @@ -1580,7 +1584,8 @@ struct _LIBCPP_TYPE_VIS_ONLY allocator_t
> {
> ptrdiff_t _Np = __end1 - __begin1;
> __end2 -= _Np;
> -            _VSTD::memcpy(__end2, __begin1, _Np * sizeof(_Tp));
> +            if (_Np > 0)
> +                _VSTD::memcpy(__end2, __begin1, _Np * sizeof(_Tp));
> }
> 
> private:
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 


[Attachment #5 (text/html)]

<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May \
30, 2015 at 8:13 PM, Marshall Clow <span dir="ltr">&lt;<a \
href="mailto:mclow.lists@gmail.com" \
target="_blank">mclow.lists@gmail.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
                solid;padding-left:1ex">Author: marshall<br>
Date: Sat May 30 22:13:31 2015<br>
New Revision: 238666<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm \
-2Dproject-3Frev-3D238666-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW \
_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=rOSOTaiW_GkkSnf3NJH6-0boric0EHjC6O5heT1lPA0&s=gpkTkUUGkWEvTz17aR117wzehfAsyKg_P8yev8y8Wpk&e=" \
target="_blank">http://llvm.org/viewvc/llvm-project?rev=238666&amp;view=rev</a><br> \
Log:<br> Don&#39;t try to memcpy zero bytes; sometimes the source pointer is NULL, \
and that&#39;s UB. Thanks to Nuno Lopes for the catch.<br> <br>
Modified:<br>
      libcxx/trunk/include/memory<br>
<br>
Modified: libcxx/trunk/include/memory<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm \
-2Dproject_libcxx_trunk_include_memory-3Frev-3D238666-26r1-3D238665-26r2-3D238666-26vi \
ew-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0c \
Cxk&m=rOSOTaiW_GkkSnf3NJH6-0boric0EHjC6O5heT1lPA0&s=miub1OXOCoLHKherPiek3aw5AsX247VgcCKC2Bv2axo&e=" \
target="_blank">http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?rev=238666&amp;r1=238665&amp;r2=238666&amp;view=diff</a><br>
 ==============================================================================<br>
--- libcxx/trunk/include/memory (original)<br>
+++ libcxx/trunk/include/memory Sat May 30 22:13:31 2015<br>
@@ -621,6 +621,8 @@ void* align(size_t alignment, size_t siz<br>
  #pragma GCC system_header<br>
  #endif<br>
<br>
+extern &quot;C&quot; int printf(const char * __restrict, ...);<br>
+<br></blockquote><div><br></div><div>Was this change intentional?</div><div>  \
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">  _LIBCPP_BEGIN_NAMESPACE_STD<br>
<br>
  // addressof moved to &lt;__functional_base&gt;<br>
@@ -1521,7 +1523,8 @@ struct _LIBCPP_TYPE_VIS_ONLY allocator_t<br>
              __construct_forward(allocator_type&amp; __a, _Tp* __begin1, _Tp* \
__end1, _Tp*&amp; __begin2)<br>  {<br>
                    ptrdiff_t _Np = __end1 - __begin1;<br>
-                  _VSTD::memcpy(__begin2, __begin1, _Np * sizeof(_Tp));<br>
+                  if (_Np &gt; 0)<br>
+                        _VSTD::memcpy(__begin2, __begin1, _Np * sizeof(_Tp));<br>
                    __begin2 += _Np;<br>
              }<br>
<br>
@@ -1549,7 +1552,8 @@ struct _LIBCPP_TYPE_VIS_ONLY allocator_t<br>
              {<br>
                    typedef typename remove_const&lt;_Tp&gt;::type _Vp;<br>
                    ptrdiff_t _Np = __end1 - __begin1;<br>
-                  _VSTD::memcpy(const_cast&lt;_Vp*&gt;(__begin2), __begin1, _Np * \
sizeof(_Tp));<br> +                  if (_Np &gt; 0)<br>
+                        _VSTD::memcpy(const_cast&lt;_Vp*&gt;(__begin2), __begin1, \
_Np * sizeof(_Tp));<br>  __begin2 += _Np;<br>
              }<br>
<br>
@@ -1580,7 +1584,8 @@ struct _LIBCPP_TYPE_VIS_ONLY allocator_t<br>
              {<br>
                    ptrdiff_t _Np = __end1 - __begin1;<br>
                    __end2 -= _Np;<br>
-                  _VSTD::memcpy(__end2, __begin1, _Np * sizeof(_Tp));<br>
+                  if (_Np &gt; 0)<br>
+                        _VSTD::memcpy(__end2, __begin1, _Np * sizeof(_Tp));<br>
              }<br>
<br>
  private:<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" \
target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br> \
</blockquote></div><br></div></div>



_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic