diff options
author | Christopher Ferris <cferris@google.com> | 2016-01-13 13:47:58 -0800 |
---|---|---|
committer | Christopher Ferris <cferris@google.com> | 2016-01-13 17:13:21 -0800 |
commit | 13f26a7b2bff5ed88b925b7206256e07596f3626 (patch) | |
tree | ea09999fc3508607d5bae97bbe0cf58edc23eed4 /tests/stdio_test.cpp | |
parent | 9817c6c0cfa01f6bf7e0700e2b7aab2c1220fe28 (diff) |
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/stdio_test.cpp')
-rw-r--r-- | tests/stdio_test.cpp | 104 |
1 files changed, 55 insertions, 49 deletions
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp index afb1511fb..58109a98f 100644 --- a/tests/stdio_test.cpp +++ b/tests/stdio_test.cpp @@ -31,14 +31,20 @@ #include "TemporaryFile.h" -TEST(stdio, flockfile_18208568_stderr) { +#if defined(NOFORTIFY) +#define STDIO_TEST stdio_nofortify +#else +#define STDIO_TEST stdio +#endif + +TEST(STDIO_TEST, flockfile_18208568_stderr) { // Check that we have a _recursive_ mutex for flockfile. flockfile(stderr); feof(stderr); // We don't care about the result, but this needs to take the lock. funlockfile(stderr); } -TEST(stdio, flockfile_18208568_regular) { +TEST(STDIO_TEST, flockfile_18208568_regular) { // We never had a bug for streams other than stdin/stdout/stderr, but test anyway. FILE* fp = fopen("/dev/null", "w"); ASSERT_TRUE(fp != NULL); @@ -48,7 +54,7 @@ TEST(stdio, flockfile_18208568_regular) { fclose(fp); } -TEST(stdio, tmpfile_fileno_fprintf_rewind_fgets) { +TEST(STDIO_TEST, tmpfile_fileno_fprintf_rewind_fgets) { FILE* fp = tmpfile(); ASSERT_TRUE(fp != NULL); @@ -73,7 +79,7 @@ TEST(stdio, tmpfile_fileno_fprintf_rewind_fgets) { fclose(fp); } -TEST(stdio, dprintf) { +TEST(STDIO_TEST, dprintf) { TemporaryFile tf; int rc = dprintf(tf.fd, "hello\n"); @@ -91,7 +97,7 @@ TEST(stdio, dprintf) { fclose(tfile); } -TEST(stdio, getdelim) { +TEST(STDIO_TEST, getdelim) { FILE* fp = tmpfile(); ASSERT_TRUE(fp != NULL); @@ -126,7 +132,7 @@ TEST(stdio, getdelim) { fclose(fp); } -TEST(stdio, getdelim_invalid) { +TEST(STDIO_TEST, getdelim_invalid) { FILE* fp = tmpfile(); ASSERT_TRUE(fp != NULL); @@ -151,7 +157,7 @@ TEST(stdio, getdelim_invalid) { fclose(fp); } -TEST(stdio, getdelim_directory) { +TEST(STDIO_TEST, getdelim_directory) { FILE* fp = fopen("/proc", "r"); ASSERT_TRUE(fp != NULL); char* word_read; @@ -160,7 +166,7 @@ TEST(stdio, getdelim_directory) { fclose(fp); } -TEST(stdio, getline) { +TEST(STDIO_TEST, getline) { FILE* fp = tmpfile(); ASSERT_TRUE(fp != NULL); @@ -202,7 +208,7 @@ TEST(stdio, getline) { fclose(fp); } -TEST(stdio, getline_invalid) { +TEST(STDIO_TEST, getline_invalid) { FILE* fp = tmpfile(); ASSERT_TRUE(fp != NULL); @@ -227,7 +233,7 @@ TEST(stdio, getline_invalid) { fclose(fp); } -TEST(stdio, printf_ssize_t) { +TEST(STDIO_TEST, printf_ssize_t) { // http://b/8253769 ASSERT_EQ(sizeof(ssize_t), sizeof(long int)); ASSERT_EQ(sizeof(ssize_t), sizeof(size_t)); @@ -240,20 +246,20 @@ TEST(stdio, printf_ssize_t) { } // https://code.google.com/p/android/issues/detail?id=64886 -TEST(stdio, snprintf_a) { +TEST(STDIO_TEST, snprintf_a) { char buf[BUFSIZ]; EXPECT_EQ(23, snprintf(buf, sizeof(buf), "<%a>", 9990.235)); EXPECT_STREQ("<0x1.3831e147ae148p+13>", buf); } -TEST(stdio, snprintf_lc) { +TEST(STDIO_TEST, snprintf_lc) { char buf[BUFSIZ]; wint_t wc = L'a'; EXPECT_EQ(3, snprintf(buf, sizeof(buf), "<%lc>", wc)); EXPECT_STREQ("<a>", buf); } -TEST(stdio, snprintf_ls) { +TEST(STDIO_TEST, snprintf_ls) { char buf[BUFSIZ]; wchar_t* ws = NULL; EXPECT_EQ(8, snprintf(buf, sizeof(buf), "<%ls>", ws)); @@ -265,7 +271,7 @@ TEST(stdio, snprintf_ls) { EXPECT_STREQ("<hi>", buf); } -TEST(stdio, snprintf_n) { +TEST(STDIO_TEST, snprintf_n) { #if defined(__BIONIC__) // http://b/14492135 char buf[32]; @@ -278,7 +284,7 @@ TEST(stdio, snprintf_n) { #endif } -TEST(stdio, snprintf_smoke) { +TEST(STDIO_TEST, snprintf_smoke) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "a"); @@ -401,7 +407,7 @@ void CheckInfNan(int snprintf_fn(T*, size_t, const T*, ...), EXPECT_STREQ(minus_inf, buf) << fmt_plus; } -TEST(stdio, snprintf_inf_nan) { +TEST(STDIO_TEST, snprintf_inf_nan) { CheckInfNan(snprintf, "%a", "%+a", "-inf", "inf", "+inf", "-nan", "nan", "+nan"); CheckInfNan(snprintf, "%A", "%+A", "-INF", "INF", "+INF", "-NAN", "NAN", "+NAN"); CheckInfNan(snprintf, "%e", "%+e", "-inf", "inf", "+inf", "-nan", "nan", "+nan"); @@ -412,7 +418,7 @@ TEST(stdio, snprintf_inf_nan) { CheckInfNan(snprintf, "%G", "%+G", "-INF", "INF", "+INF", "-NAN", "NAN", "+NAN"); } -TEST(stdio, wsprintf_inf_nan) { +TEST(STDIO_TEST, wsprintf_inf_nan) { CheckInfNan(swprintf, L"%a", L"%+a", L"-inf", L"inf", L"+inf", L"-nan", L"nan", L"+nan"); CheckInfNan(swprintf, L"%A", L"%+A", L"-INF", L"INF", L"+INF", L"-NAN", L"NAN", L"+NAN"); CheckInfNan(swprintf, L"%e", L"%+e", L"-inf", L"inf", L"+inf", L"-nan", L"nan", L"+nan"); @@ -423,19 +429,19 @@ TEST(stdio, wsprintf_inf_nan) { CheckInfNan(swprintf, L"%G", L"%+G", L"-INF", L"INF", L"+INF", L"-NAN", L"NAN", L"+NAN"); } -TEST(stdio, snprintf_d_INT_MAX) { +TEST(STDIO_TEST, snprintf_d_INT_MAX) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%d", INT_MAX); EXPECT_STREQ("2147483647", buf); } -TEST(stdio, snprintf_d_INT_MIN) { +TEST(STDIO_TEST, snprintf_d_INT_MIN) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%d", INT_MIN); EXPECT_STREQ("-2147483648", buf); } -TEST(stdio, snprintf_ld_LONG_MAX) { +TEST(STDIO_TEST, snprintf_ld_LONG_MAX) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%ld", LONG_MAX); #if __LP64__ @@ -445,7 +451,7 @@ TEST(stdio, snprintf_ld_LONG_MAX) { #endif } -TEST(stdio, snprintf_ld_LONG_MIN) { +TEST(STDIO_TEST, snprintf_ld_LONG_MIN) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%ld", LONG_MIN); #if __LP64__ @@ -455,19 +461,19 @@ TEST(stdio, snprintf_ld_LONG_MIN) { #endif } -TEST(stdio, snprintf_lld_LLONG_MAX) { +TEST(STDIO_TEST, snprintf_lld_LLONG_MAX) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%lld", LLONG_MAX); EXPECT_STREQ("9223372036854775807", buf); } -TEST(stdio, snprintf_lld_LLONG_MIN) { +TEST(STDIO_TEST, snprintf_lld_LLONG_MIN) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%lld", LLONG_MIN); EXPECT_STREQ("-9223372036854775808", buf); } -TEST(stdio, snprintf_e) { +TEST(STDIO_TEST, snprintf_e) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%e", 1.5); @@ -477,7 +483,7 @@ TEST(stdio, snprintf_e) { EXPECT_STREQ("1.500000e+00", buf); } -TEST(stdio, snprintf_negative_zero_5084292) { +TEST(STDIO_TEST, snprintf_negative_zero_5084292) { char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%e", -0.0); @@ -498,7 +504,7 @@ TEST(stdio, snprintf_negative_zero_5084292) { EXPECT_STREQ("-0X0P+0", buf); } -TEST(stdio, snprintf_utf8_15439554) { +TEST(STDIO_TEST, snprintf_utf8_15439554) { locale_t cloc = newlocale(LC_ALL, "C.UTF-8", 0); locale_t old_locale = uselocale(cloc); @@ -522,7 +528,7 @@ TEST(stdio, snprintf_utf8_15439554) { freelocale(cloc); } -TEST(stdio, fprintf_failures_7229520) { +TEST(STDIO_TEST, fprintf_failures_7229520) { // http://b/7229520 FILE* fp; @@ -545,7 +551,7 @@ TEST(stdio, fprintf_failures_7229520) { ASSERT_EQ(-1, fclose(fp)); } -TEST(stdio, popen) { +TEST(STDIO_TEST, popen) { FILE* fp = popen("cat /proc/version", "r"); ASSERT_TRUE(fp != NULL); @@ -557,7 +563,7 @@ TEST(stdio, popen) { ASSERT_EQ(0, pclose(fp)); } -TEST(stdio, getc) { +TEST(STDIO_TEST, getc) { FILE* fp = fopen("/proc/version", "r"); ASSERT_TRUE(fp != NULL); ASSERT_EQ('L', getc(fp)); @@ -568,14 +574,14 @@ TEST(stdio, getc) { fclose(fp); } -TEST(stdio, putc) { +TEST(STDIO_TEST, putc) { FILE* fp = fopen("/proc/version", "r"); ASSERT_TRUE(fp != NULL); ASSERT_EQ(EOF, putc('x', fp)); fclose(fp); } -TEST(stdio, sscanf) { +TEST(STDIO_TEST, sscanf) { char s1[123]; int i1; double d1; @@ -586,7 +592,7 @@ TEST(stdio, sscanf) { ASSERT_DOUBLE_EQ(1.23, d1); } -TEST(stdio, cantwrite_EBADF) { +TEST(STDIO_TEST, cantwrite_EBADF) { // If we open a file read-only... FILE* fp = fopen("/proc/version", "r"); @@ -626,7 +632,7 @@ TEST(stdio, cantwrite_EBADF) { // Tests that we can only have a consistent and correct fpos_t when using // f*pos functions (i.e. fpos doesn't get inside a multi byte character). -TEST(stdio, consistent_fpos_t) { +TEST(STDIO_TEST, consistent_fpos_t) { ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8")); uselocale(LC_GLOBAL_LOCALE); @@ -690,7 +696,7 @@ TEST(stdio, consistent_fpos_t) { } // Exercise the interaction between fpos and seek. -TEST(stdio, fpos_t_and_seek) { +TEST(STDIO_TEST, fpos_t_and_seek) { ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8")); uselocale(LC_GLOBAL_LOCALE); @@ -750,7 +756,7 @@ TEST(stdio, fpos_t_and_seek) { fclose(fp); } -TEST(stdio, fmemopen) { +TEST(STDIO_TEST, fmemopen) { char buf[16]; memset(buf, 0, sizeof(buf)); FILE* fp = fmemopen(buf, sizeof(buf), "r+"); @@ -770,7 +776,7 @@ TEST(stdio, fmemopen) { fclose(fp); } -TEST(stdio, fmemopen_NULL) { +TEST(STDIO_TEST, fmemopen_NULL) { FILE* fp = fmemopen(nullptr, 128, "r+"); ASSERT_NE(EOF, fputs("xyz\n", fp)); @@ -784,7 +790,7 @@ TEST(stdio, fmemopen_NULL) { fclose(fp); } -TEST(stdio, fmemopen_EINVAL) { +TEST(STDIO_TEST, fmemopen_EINVAL) { char buf[16]; // Invalid size. @@ -798,7 +804,7 @@ TEST(stdio, fmemopen_EINVAL) { ASSERT_EQ(EINVAL, errno); } -TEST(stdio, open_memstream) { +TEST(STDIO_TEST, open_memstream) { char* p = nullptr; size_t size = 0; FILE* fp = open_memstream(&p, &size); @@ -810,7 +816,7 @@ TEST(stdio, open_memstream) { free(p); } -TEST(stdio, open_memstream_EINVAL) { +TEST(STDIO_TEST, open_memstream_EINVAL) { #if defined(__BIONIC__) char* p; size_t size; @@ -829,7 +835,7 @@ TEST(stdio, open_memstream_EINVAL) { #endif } -TEST(stdio, fdopen_CLOEXEC) { +TEST(STDIO_TEST, fdopen_CLOEXEC) { int fd = open("/proc/version", O_RDONLY); ASSERT_TRUE(fd != -1); @@ -850,7 +856,7 @@ TEST(stdio, fdopen_CLOEXEC) { close(fd); } -TEST(stdio, freopen_CLOEXEC) { +TEST(STDIO_TEST, freopen_CLOEXEC) { FILE* fp = fopen("/proc/version", "r"); ASSERT_TRUE(fp != NULL); @@ -871,7 +877,7 @@ TEST(stdio, freopen_CLOEXEC) { // https://code.google.com/p/android/issues/detail?id=81155 // http://b/18556607 -TEST(stdio, fread_unbuffered_pathological_performance) { +TEST(STDIO_TEST, fread_unbuffered_pathological_performance) { FILE* fp = fopen("/dev/zero", "r"); ASSERT_TRUE(fp != NULL); @@ -900,7 +906,7 @@ TEST(stdio, fread_unbuffered_pathological_performance) { } } -TEST(stdio, fread_EOF) { +TEST(STDIO_TEST, fread_EOF) { std::string digits("0123456789"); FILE* fp = fmemopen(&digits[0], digits.size(), "r"); @@ -934,11 +940,11 @@ static void test_fread_from_write_only_stream(size_t n) { fclose(fp); } -TEST(stdio, fread_from_write_only_stream_slow_path) { +TEST(STDIO_TEST, fread_from_write_only_stream_slow_path) { test_fread_from_write_only_stream(1); } -TEST(stdio, fread_from_write_only_stream_fast_path) { +TEST(STDIO_TEST, fread_from_write_only_stream_fast_path) { test_fread_from_write_only_stream(64*1024); } @@ -967,16 +973,16 @@ static void test_fwrite_after_fread(size_t n) { fclose(fp); } -TEST(stdio, fwrite_after_fread_slow_path) { +TEST(STDIO_TEST, fwrite_after_fread_slow_path) { test_fwrite_after_fread(16); } -TEST(stdio, fwrite_after_fread_fast_path) { +TEST(STDIO_TEST, fwrite_after_fread_fast_path) { test_fwrite_after_fread(64*1024); } // http://b/19172514 -TEST(stdio, fread_after_fseek) { +TEST(STDIO_TEST, fread_after_fseek) { TemporaryFile tf; FILE* fp = fopen(tf.filename, "w+"); @@ -1014,7 +1020,7 @@ TEST(stdio, fread_after_fseek) { } // https://code.google.com/p/android/issues/detail?id=184847 -TEST(stdio, fread_EOF_184847) { +TEST(STDIO_TEST, fread_EOF_184847) { TemporaryFile tf; char buf[6] = {0}; |