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

@ -28,6 +28,7 @@
#include "libc/x/x.h"
uint64_t i;
char pathbuf[PATH_MAX];
const char *oldpath, *bindir, *homedir, *binsh, *sh;
TEST(commandv_00, todo) { /* TODO(jart): Improve this on Windows. */
@ -51,20 +52,10 @@ TEST(commandv_010, testSlashes_wontSearchPath_butChecksAccess) {
sh = defer(unlink, gc(xasprintf("%s/sh.com", homedir)));
EXPECT_NE(-1, touch(sh, 0755));
i = g_syscount;
EXPECT_STREQ(sh, commandv(sh));
EXPECT_STREQ(sh, commandv(sh, pathbuf));
if (!IsWindows()) EXPECT_EQ(i + 1 /* access() */, g_syscount);
}
TEST(commandv_010, testNoSlashes_searchesPath_withMemoization) {
if (IsTiny()) return;
i = g_syscount;
EXPECT_STREQ(binsh, commandv("sh.com"));
if (!IsWindows()) EXPECT_GT(g_syscount, i);
i = g_syscount;
EXPECT_STREQ(binsh, commandv("sh.com"));
if (!IsWindows()) EXPECT_EQ(g_syscount, i);
}
TEST(commandv_999, teardown) {
setenv("PATH", oldpath, true);
unlink(binsh);

View file

@ -19,7 +19,10 @@
*/
#include "libc/crypto/rijndael.h"
#include "libc/dce.h"
#include "libc/fmt/bing.h"
#include "libc/runtime/internal.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/prot.h"
#include "libc/testlib/testlib.h"
/**

View file

@ -23,6 +23,8 @@ TEST_LIBC_CRYPTO_CHECKS = \
TEST_LIBC_CRYPTO_DIRECTDEPS = \
LIBC_CRYPTO \
LIBC_RUNTIME \
LIBC_FMT \
LIBC_NEXGEN32E \
LIBC_STUBS \
LIBC_TESTLIB

View file

@ -51,8 +51,8 @@ o/$(MODE)/test/libc/mem/%.com.dbg: \
@$(APELINK)
$(TEST_LIBC_MEM_OBJS): \
DEFAULT_CCFLAGS += \
-fno-builtin
DEFAULT_CCFLAGS += \
-fno-builtin
.PHONY: o/$(MODE)/test/libc/mem
o/$(MODE)/test/libc/mem: \

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

View file

@ -7,6 +7,7 @@ o/$(MODE)/test/libc: \
o/$(MODE)/test/libc/bits \
o/$(MODE)/test/libc/calls \
o/$(MODE)/test/libc/conv \
o/$(MODE)/test/libc/crypto \
o/$(MODE)/test/libc/dns \
o/$(MODE)/test/libc/fmt \
o/$(MODE)/test/libc/intrin \