Fix test for memory allocators that want to look backwards.
[folly.git] / folly / test / RangeTest.cpp
index 445df4248fb324290b594115ab4f7c962beb6302..a6fe97e90da2182ec54329d4c9f01faa34802b48 100644 (file)
@@ -441,8 +441,7 @@ const size_t kPageSize = 4096;
 void createProtectedBuf(StringPiece& contents, char** buf) {
   ASSERT_LE(contents.size(), kPageSize);
   const size_t kSuccess = 0;
-  char* tmp;
-  if (kSuccess != posix_memalign((void**)buf, kPageSize, 2 * kPageSize)) {
+  if (kSuccess != posix_memalign((void**)buf, kPageSize, 4 * kPageSize)) {
     ASSERT_FALSE(true);
   }
   mprotect(*buf + kPageSize, kPageSize, PROT_NONE);
@@ -451,6 +450,11 @@ void createProtectedBuf(StringPiece& contents, char** buf) {
   contents.reset(*buf + newBegin, contents.size());
 }
 
+void freeProtectedBuf(char* buf) {
+  mprotect(buf + kPageSize, kPageSize, PROT_READ | PROT_WRITE);
+  free(buf);
+}
+
 TYPED_TEST(NeedleFinderTest, NoSegFault) {
   const string base = string(32, 'a') + string("b");
   const string delims = string(32, 'c') + string("b");
@@ -482,8 +486,8 @@ TYPED_TEST(NeedleFinderTest, NoSegFault) {
                                      s1.begin(), s1.end());
         auto e2 = (f2 == s2.end()) ? StringPiece::npos : f2 - s2.begin();
         EXPECT_EQ(r2, e2);
-        free(buf1);
-        free(buf2);
+        freeProtectedBuf(buf1);
+        freeProtectedBuf(buf2);
       }
     }
   }