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);
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");
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);
}
}
}