diff --git a/src/libstrongswan/tests/suites/test_chunk.c b/src/libstrongswan/tests/suites/test_chunk.c index 3f7238152..93753c739 100644 --- a/src/libstrongswan/tests/suites/test_chunk.c +++ b/src/libstrongswan/tests/suites/test_chunk.c @@ -125,12 +125,27 @@ END_TEST * clear */ +ADDRESS_SANITIZER_EXCLUDE +static bool cleared(u_char *ptr) +{ + int i; + + for (i = 0; i < 64; i += 2) + { + if (ptr[i] != 0 && ptr[i] == i && + ptr[i+1] != 0 && ptr[i+1] == i+1) + { + return FALSE; + } + } + return TRUE; +} + START_TEST(test_chunk_clear) { chunk_t chunk; u_char *ptr; int i; - bool cleared = TRUE; chunk = chunk_empty; chunk_clear(&chunk); @@ -147,17 +162,8 @@ START_TEST(test_chunk_clear) * test directly, as it might allocate data at the freed area. comparing * two bytes at once reduces the chances of conflicts if memory got * overwritten already */ - for (i = 0; i < 64; i += 2) - { - if (ptr[i] != 0 && ptr[i] == i && - ptr[i+1] != 0 && ptr[i+1] == i+1) - { - cleared = FALSE; - break; - } - } + ck_assert(cleared(ptr)); assert_chunk_empty(chunk); - ck_assert(cleared); } END_TEST @@ -199,6 +205,27 @@ END_TEST * chunk_create_cat */ +ADDRESS_SANITIZER_EXCLUDE +bool chunk_equals_nosan(chunk_t a, chunk_t b) +{ + int i; + + /* cant use memcmp() or any function using it, as that is again + * sanitize-checked */ + if (a.len != b.len) + { + return FALSE; + } + for (i = 0; i < b.len; i++) + { + if (a.ptr[i] != b.ptr[i]) + { + return FALSE; + } + } + return TRUE; +} + START_TEST(test_chunk_create_cat) { chunk_t foo, bar; @@ -236,8 +263,8 @@ START_TEST(test_chunk_create_cat) ck_assert_int_eq(c.len, 6); ck_assert(chunk_equals(c, chunk_from_str("foobar"))); /* check memory area of cleared chunk */ - ck_assert(!chunk_equals(foo, chunk_create(ptra, 3))); - ck_assert(!chunk_equals(bar, chunk_create(ptrb, 3))); + ck_assert(!chunk_equals_nosan(foo, chunk_create(ptra, 3))); + ck_assert(!chunk_equals_nosan(bar, chunk_create(ptrb, 3))); } END_TEST