summaryrefslogtreecommitdiff
path: root/tests/stdio_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/stdio_test.cpp
parent9817c6c0cfa01f6bf7e0700e2b7aab2c1220fe28 (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.cpp104
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};