folly: fbvector: ubsan: don't call memcpy() with nullptr args if size == 0
authorMarcus Holland-Moritz <mhx@fb.com>
Tue, 17 May 2016 20:08:17 +0000 (13:08 -0700)
committerFacebook Github Bot 2 <facebook-github-bot-2-bot@fb.com>
Tue, 17 May 2016 20:23:30 +0000 (13:23 -0700)
Reviewed By: meyering, luciang

Differential Revision: D3310683

fbshipit-source-id: c86471d54062b2f3455f15fb73340fac486d9e44

folly/FBVector.h

index fb611e56c1e4759b8a610d289f55fa6671449d05..036882a4930414a1c8def4cafae5785c66454720 100644 (file)
@@ -522,7 +522,9 @@ private:
 
   static void
   S_uninitialized_copy_bits(T* dest, const T* first, const T* last) {
-    std::memcpy((void*)dest, (void*)first, (last - first) * sizeof(T));
+    if (last != first) {
+      std::memcpy((void*)dest, (void*)first, (last - first) * sizeof(T));
+    }
   }
 
   static void
@@ -530,7 +532,9 @@ private:
                        std::move_iterator<T*> last) {
     T* bFirst = first.base();
     T* bLast = last.base();
-    std::memcpy((void*)dest, (void*)bFirst, (bLast - bFirst) * sizeof(T));
+    if (bLast != bFirst) {
+      std::memcpy((void*)dest, (void*)bFirst, (bLast - bFirst) * sizeof(T));
+    }
   }
 
   template <typename It>