aboutsummaryrefslogtreecommitdiff
path: root/tests/string_test.cpp
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2016-01-13 13:47:58 -0800
committerChristopher Ferris <cferris@google.com>2016-01-13 17:13:21 -0800
commit13f26a7b2bff5ed88b925b7206256e07596f3626 (patch)
treeea09999fc3508607d5bae97bbe0cf58edc23eed4 /tests/string_test.cpp
parent9817c6c0cfa01f6bf7e0700e2b7aab2c1220fe28 (diff)
downloadbionic-13f26a7b2bff5ed88b925b7206256e07596f3626.tar.gz
Add method to run fortified versions of funcs.
Add a way to turn fortify off for the files that test fortify functions. This method involves simply compiling the same file with fortify off and changing the test name slightly. It's not very pretty, and it assumes that only these few files test functions that can be fortified. Bug: 15195631 Change-Id: Iba9db1d508b7d28a1d6968019cb70fe08864827b
Diffstat (limited to 'tests/string_test.cpp')
-rw-r--r--tests/string_test.cpp148
1 files changed, 77 insertions, 71 deletions
diff --git a/tests/string_test.cpp b/tests/string_test.cpp
index 842e1c7ee..96b414397 100644
--- a/tests/string_test.cpp
+++ b/tests/string_test.cpp
@@ -26,6 +26,12 @@
#include "buffer_tests.h"
+#if defined(NOFORTIFY)
+#define STRING_TEST string_nofortify
+#else
+#define STRING_TEST string
+#endif
+
#if defined(__BIONIC__)
#define STRLCPY_SUPPORTED
#define STRLCAT_SUPPORTED
@@ -45,7 +51,7 @@ static int signum(int i) {
return 0;
}
-TEST(string, strerror) {
+TEST(STRING_TEST, strerror) {
// Valid.
ASSERT_STREQ("Success", strerror(0));
ASSERT_STREQ("Operation not permitted", strerror(1));
@@ -63,7 +69,7 @@ static void* ConcurrentStrErrorFn(void*) {
#endif // __BIONIC__
// glibc's strerror isn't thread safe, only its strsignal.
-TEST(string, strerror_concurrent) {
+TEST(STRING_TEST, strerror_concurrent) {
#if defined(__BIONIC__)
const char* strerror1001 = strerror(1001);
ASSERT_STREQ("Unknown error 1001", strerror1001);
@@ -80,7 +86,7 @@ TEST(string, strerror_concurrent) {
#endif // __BIONIC__
}
-TEST(string, gnu_strerror_r) {
+TEST(STRING_TEST, gnu_strerror_r) {
char buf[256];
// Note that glibc doesn't necessarily write into the buffer.
@@ -110,7 +116,7 @@ TEST(string, gnu_strerror_r) {
ASSERT_EQ(0, errno);
}
-TEST(string, strsignal) {
+TEST(STRING_TEST, strsignal) {
// A regular signal.
ASSERT_STREQ("Hangup", strsignal(1));
@@ -130,7 +136,7 @@ static void* ConcurrentStrSignalFn(void*) {
return reinterpret_cast<void*>(equal);
}
-TEST(string, strsignal_concurrent) {
+TEST(STRING_TEST, strsignal_concurrent) {
const char* strsignal1001 = strsignal(1001);
ASSERT_STREQ("Unknown signal 1001", strsignal1001);
@@ -243,7 +249,7 @@ size_t StringTestState<Character>::alignments[] = { 24, 32, 16, 48, 0, 1, 2, 3,
template<class Character>
size_t StringTestState<Character>::alignments_size = sizeof(alignments)/sizeof(size_t);
-TEST(string, strcat) {
+TEST(STRING_TEST, strcat) {
StringTestState<char> state(SMALL);
for (size_t i = 1; i < state.n; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -264,7 +270,7 @@ TEST(string, strcat) {
}
// one byte target with "\0" source
-TEST(string, strcpy2) {
+TEST(STRING_TEST, strcpy2) {
char buf[1];
char* orig = strdup("");
ASSERT_EQ(buf, strcpy(buf, orig));
@@ -273,7 +279,7 @@ TEST(string, strcpy2) {
}
// multibyte target where we under fill target
-TEST(string, strcpy3) {
+TEST(STRING_TEST, strcpy3) {
char buf[10];
char* orig = strdup("12345");
memset(buf, 'A', sizeof(buf));
@@ -287,7 +293,7 @@ TEST(string, strcpy3) {
}
// multibyte target where we fill target exactly
-TEST(string, strcpy4) {
+TEST(STRING_TEST, strcpy4) {
char buf[10];
char* orig = strdup("123456789");
memset(buf, 'A', sizeof(buf));
@@ -297,7 +303,7 @@ TEST(string, strcpy4) {
}
// one byte target with "\0" source
-TEST(string, stpcpy2) {
+TEST(STRING_TEST, stpcpy2) {
char buf[1];
char* orig = strdup("");
ASSERT_EQ(buf, stpcpy(buf, orig));
@@ -306,7 +312,7 @@ TEST(string, stpcpy2) {
}
// multibyte target where we under fill target
-TEST(string, stpcpy3) {
+TEST(STRING_TEST, stpcpy3) {
char buf[10];
char* orig = strdup("12345");
memset(buf, 'A', sizeof(buf));
@@ -320,7 +326,7 @@ TEST(string, stpcpy3) {
}
// multibyte target where we fill target exactly
-TEST(string, stpcpy4) {
+TEST(STRING_TEST, stpcpy4) {
char buf[10];
char* orig = strdup("123456789");
memset(buf, 'A', sizeof(buf));
@@ -329,7 +335,7 @@ TEST(string, stpcpy4) {
free(orig);
}
-TEST(string, strcat2) {
+TEST(STRING_TEST, strcat2) {
char buf[10];
memset(buf, 'A', sizeof(buf));
buf[0] = 'a';
@@ -342,7 +348,7 @@ TEST(string, strcat2) {
ASSERT_EQ('A', buf[9]);
}
-TEST(string, strcat3) {
+TEST(STRING_TEST, strcat3) {
char buf[10];
memset(buf, 'A', sizeof(buf));
buf[0] = 'a';
@@ -352,7 +358,7 @@ TEST(string, strcat3) {
ASSERT_STREQ("a01234567", buf);
}
-TEST(string, strncat2) {
+TEST(STRING_TEST, strncat2) {
char buf[10];
memset(buf, 'A', sizeof(buf));
buf[0] = 'a';
@@ -365,7 +371,7 @@ TEST(string, strncat2) {
ASSERT_EQ('A', buf[9]);
}
-TEST(string, strncat3) {
+TEST(STRING_TEST, strncat3) {
char buf[10];
memset(buf, 'A', sizeof(buf));
buf[0] = 'a';
@@ -378,7 +384,7 @@ TEST(string, strncat3) {
ASSERT_EQ('A', buf[9]);
}
-TEST(string, strncat4) {
+TEST(STRING_TEST, strncat4) {
char buf[10];
memset(buf, 'A', sizeof(buf));
buf[0] = 'a';
@@ -388,7 +394,7 @@ TEST(string, strncat4) {
ASSERT_STREQ("a01234567", buf);
}
-TEST(string, strncat5) {
+TEST(STRING_TEST, strncat5) {
char buf[10];
memset(buf, 'A', sizeof(buf));
buf[0] = 'a';
@@ -398,14 +404,14 @@ TEST(string, strncat5) {
ASSERT_STREQ("a01234567", buf);
}
-TEST(string, strchr_with_0) {
+TEST(STRING_TEST, strchr_with_0) {
char buf[10];
const char* s = "01234";
memcpy(buf, s, strlen(s) + 1);
EXPECT_TRUE(strchr(buf, '\0') == (buf + strlen(s)));
}
-TEST(string, strchr_multiple) {
+TEST(STRING_TEST, strchr_multiple) {
char str[128];
memset(str, 'a', sizeof(str) - 1);
str[sizeof(str)-1] = '\0';
@@ -423,7 +429,7 @@ TEST(string, strchr_multiple) {
}
}
-TEST(string, strchr) {
+TEST(STRING_TEST, strchr) {
int seek_char = 'R';
StringTestState<char> state(SMALL);
@@ -454,14 +460,14 @@ TEST(string, strchr) {
}
}
-TEST(string, strchrnul) {
+TEST(STRING_TEST, strchrnul) {
const char* s = "01234222";
EXPECT_TRUE(strchrnul(s, '2') == &s[2]);
EXPECT_TRUE(strchrnul(s, '8') == (s + strlen(s)));
EXPECT_TRUE(strchrnul(s, '\0') == (s + strlen(s)));
}
-TEST(string, strcmp) {
+TEST(STRING_TEST, strcmp) {
StringTestState<char> state(SMALL);
for (size_t i = 1; i < state.n; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -496,7 +502,7 @@ TEST(string, strcmp) {
}
}
-TEST(string, stpcpy) {
+TEST(STRING_TEST, stpcpy) {
StringTestState<char> state(SMALL);
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
size_t pos = random() % state.MAX_LEN;
@@ -520,7 +526,7 @@ TEST(string, stpcpy) {
}
}
-TEST(string, strcpy) {
+TEST(STRING_TEST, strcpy) {
StringTestState<char> state(SMALL);
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
size_t pos = random() % state.MAX_LEN;
@@ -544,7 +550,7 @@ TEST(string, strcpy) {
}
}
-TEST(string, strlcat) {
+TEST(STRING_TEST, strlcat) {
#if defined(STRLCAT_SUPPORTED)
StringTestState<char> state(SMALL);
for (size_t i = 0; i < state.n; i++) {
@@ -573,7 +579,7 @@ TEST(string, strlcat) {
#endif
}
-TEST(string, strlcpy) {
+TEST(STRING_TEST, strlcpy) {
#if defined(STRLCPY_SUPPORTED)
StringTestState<char> state(SMALL);
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -605,7 +611,7 @@ TEST(string, strlcpy) {
#endif
}
-TEST(string, strncat) {
+TEST(STRING_TEST, strncat) {
StringTestState<char> state(SMALL);
for (size_t i = 1; i < state.n; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -629,7 +635,7 @@ TEST(string, strncat) {
}
}
-TEST(string, strncmp) {
+TEST(STRING_TEST, strncmp) {
StringTestState<char> state(SMALL);
for (size_t i = 1; i < state.n; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -664,7 +670,7 @@ TEST(string, strncmp) {
}
}
-TEST(string, stpncpy) {
+TEST(STRING_TEST, stpncpy) {
StringTestState<char> state(SMALL);
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
memset(state.ptr1, 'J', state.MAX_LEN);
@@ -699,7 +705,7 @@ TEST(string, stpncpy) {
}
}
-TEST(string, strncpy) {
+TEST(STRING_TEST, strncpy) {
StringTestState<char> state(SMALL);
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
// Choose a random value to fill the string, except \0 (string terminator),
@@ -736,7 +742,7 @@ TEST(string, strncpy) {
}
}
-TEST(string, strrchr) {
+TEST(STRING_TEST, strrchr) {
int seek_char = 'M';
StringTestState<char> state(SMALL);
for (size_t i = 1; i < state.n; i++) {
@@ -766,7 +772,7 @@ TEST(string, strrchr) {
}
}
-TEST(string, memchr) {
+TEST(STRING_TEST, memchr) {
int seek_char = 'N';
StringTestState<char> state(SMALL);
for (size_t i = 0; i < state.n; i++) {
@@ -787,7 +793,7 @@ TEST(string, memchr) {
}
}
-TEST(string, memchr_zero) {
+TEST(STRING_TEST, memchr_zero) {
uint8_t* buffer;
ASSERT_EQ(0, posix_memalign(reinterpret_cast<void**>(&buffer), 64, 64));
memset(buffer, 10, 64);
@@ -795,7 +801,7 @@ TEST(string, memchr_zero) {
ASSERT_TRUE(NULL == memchr(buffer, 10, 0));
}
-TEST(string, memrchr) {
+TEST(STRING_TEST, memrchr) {
int seek_char = 'P';
StringTestState<char> state(SMALL);
for (size_t i = 0; i < state.n; i++) {
@@ -816,7 +822,7 @@ TEST(string, memrchr) {
}
}
-TEST(string, memcmp) {
+TEST(STRING_TEST, memcmp) {
StringTestState<char> state(SMALL);
for (size_t i = 0; i < state.n; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -836,7 +842,7 @@ TEST(string, memcmp) {
}
}
-TEST(string, wmemcmp) {
+TEST(STRING_TEST, wmemcmp) {
StringTestState<wchar_t> state(SMALL);
for (size_t i = 0; i < state.n; i++) {
@@ -858,7 +864,7 @@ TEST(string, wmemcmp) {
}
}
-TEST(string, memcpy) {
+TEST(STRING_TEST, memcpy) {
StringTestState<char> state(LARGE);
int rand = 4;
for (size_t i = 0; i < state.n - 1; i++) {
@@ -878,7 +884,7 @@ TEST(string, memcpy) {
}
}
-TEST(string, memset) {
+TEST(STRING_TEST, memset) {
StringTestState<char> state(LARGE);
char ch = 'P';
for (size_t i = 0; i < state.n - 1; i++) {
@@ -898,7 +904,7 @@ TEST(string, memset) {
}
}
-TEST(string, memmove) {
+TEST(STRING_TEST, memmove) {
StringTestState<char> state(LARGE);
for (size_t i = 0; i < state.n - 1; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -917,7 +923,7 @@ TEST(string, memmove) {
}
}
-TEST(string, memmove_cache_size) {
+TEST(STRING_TEST, memmove_cache_size) {
size_t len = 600000;
int max_alignment = 31;
int alignments[] = {0, 5, 11, 29, 30};
@@ -955,7 +961,7 @@ static void verify_memmove(char* src_copy, char* dst, char* src, size_t size) {
#define MEMMOVE_DATA_SIZE (1024*1024*3)
-TEST(string, memmove_check) {
+TEST(STRING_TEST, memmove_check) {
char* buffer = reinterpret_cast<char*>(malloc(MEMMOVE_DATA_SIZE));
ASSERT_TRUE(buffer != NULL);
@@ -996,7 +1002,7 @@ TEST(string, memmove_check) {
}
}
-TEST(string, bcopy) {
+TEST(STRING_TEST, bcopy) {
StringTestState<char> state(LARGE);
for (size_t i = 0; i < state.n; i++) {
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -1013,7 +1019,7 @@ TEST(string, bcopy) {
}
}
-TEST(string, bzero) {
+TEST(STRING_TEST, bzero) {
StringTestState<char> state(LARGE);
for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
memset(state.ptr1, 'R', state.MAX_LEN);
@@ -1039,11 +1045,11 @@ static void DoMemcpyTest(uint8_t* src, uint8_t* dst, size_t len) {
ASSERT_TRUE(memcmp(src, dst, len) == 0);
}
-TEST(string, memcpy_align) {
+TEST(STRING_TEST, memcpy_align) {
RunSrcDstBufferAlignTest(LARGE, DoMemcpyTest);
}
-TEST(string, memcpy_overread) {
+TEST(STRING_TEST, memcpy_overread) {
RunSrcDstBufferOverreadTest(DoMemcpyTest);
}
@@ -1055,11 +1061,11 @@ static void DoMemmoveTest(uint8_t* src, uint8_t* dst, size_t len) {
ASSERT_TRUE(memcmp(src, dst, len) == 0);
}
-TEST(string, memmove_align) {
+TEST(STRING_TEST, memmove_align) {
RunSrcDstBufferAlignTest(LARGE, DoMemmoveTest);
}
-TEST(string, memmove_overread) {
+TEST(STRING_TEST, memmove_overread) {
RunSrcDstBufferOverreadTest(DoMemmoveTest);
}
@@ -1074,7 +1080,7 @@ static void DoMemsetTest(uint8_t* buf, size_t len) {
}
}
-TEST(string, memset_align) {
+TEST(STRING_TEST, memset_align) {
RunSingleBufferAlignTest(LARGE, DoMemsetTest);
}
@@ -1086,11 +1092,11 @@ static void DoStrlenTest(uint8_t* buf, size_t len) {
}
}
-TEST(string, strlen_align) {
+TEST(STRING_TEST, strlen_align) {
RunSingleBufferAlignTest(LARGE, DoStrlenTest);
}
-TEST(string, strlen_overread) {
+TEST(STRING_TEST, strlen_overread) {
RunSingleBufferOverreadTest(DoStrlenTest);
}
@@ -1105,11 +1111,11 @@ static void DoStrcpyTest(uint8_t* src, uint8_t* dst, size_t len) {
}
}
-TEST(string, strcpy_align) {
+TEST(STRING_TEST, strcpy_align) {
RunSrcDstBufferAlignTest(LARGE, DoStrcpyTest);
}
-TEST(string, strcpy_overread) {
+TEST(STRING_TEST, strcpy_overread) {
RunSrcDstBufferOverreadTest(DoStrcpyTest);
}
@@ -1126,7 +1132,7 @@ static void DoStrlcpyTest(uint8_t* src, uint8_t* dst, size_t len) {
}
#endif
-TEST(string, strlcpy_align) {
+TEST(STRING_TEST, strlcpy_align) {
#if defined(STRLCPY_SUPPORTED)
RunSrcDstBufferAlignTest(LARGE, DoStrlcpyTest);
#else
@@ -1134,7 +1140,7 @@ TEST(string, strlcpy_align) {
#endif
}
-TEST(string, strlcpy_overread) {
+TEST(STRING_TEST, strlcpy_overread) {
#if defined(STRLCPY_SUPPORTED)
RunSrcDstBufferOverreadTest(DoStrlcpyTest);
#else
@@ -1154,11 +1160,11 @@ static void DoStpcpyTest(uint8_t* src, uint8_t* dst, size_t len) {
}
}
-TEST(string, stpcpy_align) {
+TEST(STRING_TEST, stpcpy_align) {
RunSrcDstBufferAlignTest(LARGE, DoStpcpyTest);
}
-TEST(string, stpcpy_overread) {
+TEST(STRING_TEST, stpcpy_overread) {
RunSrcDstBufferOverreadTest(DoStpcpyTest);
}
@@ -1214,11 +1220,11 @@ static void DoStrcatTest(uint8_t* src, uint8_t* dst, size_t len) {
}
}
-TEST(string, strcat_align) {
+TEST(STRING_TEST, strcat_align) {
RunSrcDstBufferAlignTest(MEDIUM, DoStrcatTest, LargeSetIncrement);
}
-TEST(string, strcat_overread) {
+TEST(STRING_TEST, strcat_overread) {
RunSrcDstBufferOverreadTest(DoStrcatTest);
}
@@ -1262,7 +1268,7 @@ static void DoStrlcatTest(uint8_t* src, uint8_t* dst, size_t len) {
}
#endif
-TEST(string, strlcat_align) {
+TEST(STRING_TEST, strlcat_align) {
#if defined(STRLCAT_SUPPORTED)
RunSrcDstBufferAlignTest(MEDIUM, DoStrlcatTest, LargeSetIncrement);
#else
@@ -1270,7 +1276,7 @@ TEST(string, strlcat_align) {
#endif
}
-TEST(string, strlcat_overread) {
+TEST(STRING_TEST, strlcat_overread) {
#if defined(STRLCAT_SUPPORTED)
RunSrcDstBufferOverreadTest(DoStrlcatTest);
#else
@@ -1323,11 +1329,11 @@ static void DoStrcmpFailTest(uint8_t* buf1, uint8_t* buf2, size_t len1, size_t l
}
}
-TEST(string, strcmp_align) {
+TEST(STRING_TEST, strcmp_align) {
RunCmpBufferAlignTest(MEDIUM, DoStrcmpTest, DoStrcmpFailTest, LargeSetIncrement);
}
-TEST(string, strcmp_overread) {
+TEST(STRING_TEST, strcmp_overread) {
RunCmpBufferOverreadTest(DoStrcmpTest, DoStrcmpFailTest);
}
@@ -1355,11 +1361,11 @@ static void DoMemcmpFailTest(uint8_t* buf1, uint8_t* buf2, size_t len1, size_t l
ASSERT_NE(0, memcmp(buf1, buf2, len));
}
-TEST(string, memcmp_align) {
+TEST(STRING_TEST, memcmp_align) {
RunCmpBufferAlignTest(MEDIUM, DoMemcmpTest, DoMemcmpFailTest, LargeSetIncrement);
}
-TEST(string, memcmp_overread) {
+TEST(STRING_TEST, memcmp_overread) {
RunCmpBufferOverreadTest(DoMemcmpTest, DoMemcmpFailTest);
}
@@ -1381,11 +1387,11 @@ static void DoStrchrTest(uint8_t* buf, size_t len) {
}
}
-TEST(string, strchr_align) {
+TEST(STRING_TEST, strchr_align) {
RunSingleBufferAlignTest(MEDIUM, DoStrchrTest);
}
-TEST(string, strchr_overread) {
+TEST(STRING_TEST, strchr_overread) {
RunSingleBufferOverreadTest(DoStrchrTest);
}
@@ -1396,7 +1402,7 @@ static void TestBasename(const char* in, const char* expected_out) {
ASSERT_EQ(0, errno) << in;
}
-TEST(string, __gnu_basename) {
+TEST(STRING_TEST, __gnu_basename) {
TestBasename("", "");
TestBasename("/usr/lib", "lib");
TestBasename("/usr/", "");
@@ -1408,7 +1414,7 @@ TEST(string, __gnu_basename) {
TestBasename("//usr//lib//", "");
}
-TEST(string, strnlen_147048) {
+TEST(STRING_TEST, strnlen_147048) {
// https://code.google.com/p/android/issues/detail?id=147048
char stack_src[64] = {0};
EXPECT_EQ(0U, strnlen(stack_src, 1024*1024*1024));
@@ -1418,11 +1424,11 @@ TEST(string, strnlen_147048) {
delete[] heap_src;
}
-TEST(string, strnlen_74741) {
+TEST(STRING_TEST, strnlen_74741) {
ASSERT_EQ(4U, strnlen("test", SIZE_MAX));
}
-TEST(string, mempcpy) {
+TEST(STRING_TEST, mempcpy) {
char dst[6];
ASSERT_EQ(&dst[4], reinterpret_cast<char*>(mempcpy(dst, "hello", 4)));
}