Remove undefined behavior in goodMallocSize()
authorAdrien Conrath <adri@fb.com>
Wed, 25 Nov 2015 16:34:09 +0000 (08:34 -0800)
committerfacebook-github-bot-0 <folly-bot@fb.com>
Wed, 25 Nov 2015 17:20:20 +0000 (09:20 -0800)
Reviewed By: ot

Differential Revision: D2695741

fb-gh-sync-id: d33263c1ffa5651d66f37992ce365dae157ed449

folly/Malloc.h
folly/test/FBVectorTest.cpp

index f8398911f9558664eb7c351b3afca70c01405908..828c1b659ab8fd1487b3eb82b266c4aeabbb6eb6 100644 (file)
@@ -177,6 +177,10 @@ inline bool usingJEMalloc() noexcept {
 }
 
 inline size_t goodMallocSize(size_t minSize) noexcept {
+  if (minSize == 0) {
+    return 0;
+  }
+
   if (!usingJEMalloc()) {
     // Not using jemalloc - no smarts
     return minSize;
index 330dc4bb93d7eefc653eb3ca6db298d1256f7e92..ae8458347aa191ec9bd547ba8cdaa2b6919ffe56 100644 (file)
@@ -274,6 +274,16 @@ TEST(FBVector, vector_of_maps) {
   EXPECT_EQ(1, v[1].size());
 }
 
+TEST(FBVector, shrink_to_fit_after_clear) {
+  fbvector<int> fb1;
+  fb1.push_back(42);
+  fb1.push_back(1337);
+  fb1.clear();
+  fb1.shrink_to_fit();
+  EXPECT_EQ(fb1.size(), 0);
+  EXPECT_EQ(fb1.capacity(), 0);
+}
+
 int main(int argc, char** argv) {
   testing::InitGoogleTest(&argc, argv);
   gflags::ParseCommandLineFlags(&argc, &argv, true);