Get address sanitizer mostly working

This commit is contained in:
Justine Tunney 2020-09-03 05:44:37 -07:00
parent 1f1f3cd477
commit 7327c345f9
149 changed files with 3777 additions and 3457 deletions

View file

@ -47,16 +47,17 @@ TEST(grow, testStackMemory_convertsToDynamic) {
int A[] = {1, 2, 3};
int *p = A;
size_t capacity = ARRAYLEN(A);
EXPECT_FALSE(isheap(p));
EXPECT_TRUE(grow(&p, &capacity, sizeof(int), 0));
EXPECT_TRUE(isheap(p));
EXPECT_GT(capacity, ARRAYLEN(A));
EXPECT_EQ(1, p[0]);
EXPECT_EQ(2, p[1]);
EXPECT_EQ(3, p[2]);
p[0] = 7;
EXPECT_EQ(1, A[0]);
free(p);
if (!isheap(p)) {
EXPECT_TRUE(grow(&p, &capacity, sizeof(int), 0));
EXPECT_TRUE(isheap(p));
EXPECT_GT(capacity, ARRAYLEN(A));
EXPECT_EQ(1, p[0]);
EXPECT_EQ(2, p[1]);
EXPECT_EQ(3, p[2]);
p[0] = 7;
EXPECT_EQ(1, A[0]);
free(p);
}
}
TEST(grow, testGrowth_clearsNewMemory) {
@ -86,12 +87,13 @@ TEST(grow, testOverflow_returnsFalseAndDoesNotFree) {
int A[] = {1, 2, 3};
int *p = A;
size_t capacity = ARRAYLEN(A);
EXPECT_FALSE(isheap(p));
EXPECT_FALSE(grow(&p, &capacity, pushpop(SIZE_MAX), 0));
EXPECT_FALSE(isheap(p));
EXPECT_EQ(capacity, ARRAYLEN(A));
EXPECT_EQ(1, p[0]);
EXPECT_EQ(2, p[1]);
EXPECT_EQ(3, p[2]);
free_s(&p);
if (!isheap(p)) {
EXPECT_FALSE(grow(&p, &capacity, pushpop(SIZE_MAX), 0));
EXPECT_FALSE(isheap(p));
EXPECT_EQ(capacity, ARRAYLEN(A));
EXPECT_EQ(1, p[0]);
EXPECT_EQ(2, p[1]);
EXPECT_EQ(3, p[2]);
free_s(&p);
}
}

View file

@ -72,32 +72,31 @@ TEST(mmap, testMapFile_fdGetsClosed_makesNoDifference) {
TEST(mmap, testMapFixed_destroysEverythingInItsPath) {
unsigned m1 = _mmi.i;
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedMappingsStart + FRAMESIZE * 0),
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedmapStart + FRAMESIZE * 0),
FRAMESIZE, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedMappingsStart + FRAMESIZE * 1),
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedmapStart + FRAMESIZE * 1),
FRAMESIZE, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedMappingsStart + FRAMESIZE * 2),
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedmapStart + FRAMESIZE * 2),
FRAMESIZE, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedMappingsStart + FRAMESIZE * 0),
EXPECT_NE(MAP_FAILED, mmap((void *)(kFixedmapStart + FRAMESIZE * 0),
FRAMESIZE * 3, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
ASSERT_GT(_mmi.i, m1);
EXPECT_NE(-1, munmap((void *)kFixedMappingsStart, FRAMESIZE * 3));
EXPECT_NE(-1, munmap((void *)kFixedmapStart, FRAMESIZE * 3));
#ifdef __SANITIZE_ADDRESS__
ASSERT_EQ(m1 + 1, _mmi.i);
#else
ASSERT_EQ(m1, _mmi.i);
#endif
}
TEST(isheap, nullPtr) {
ASSERT_FALSE(isheap(NULL));
}
TEST(isheap, stackMemory) {
int boop;
ASSERT_FALSE(isheap(&boop));
}
TEST(isheap, malloc) {
ASSERT_TRUE(isheap(gc(malloc(1))));
}