aboutsummaryrefslogtreecommitdiffstats
path: root/tests/fortify2_test.cpp
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2013-06-28 10:34:09 -0700
committerNick Kralevich <nnk@google.com>2013-06-28 11:54:29 -0700
commit5bcf39842e8c4b02ae557a2765a84e724f762469 (patch)
treeed5b7404f85db58dd64433cb033114059705bcfa /tests/fortify2_test.cpp
parent78a7bf998d2d29592504984fcf419cd2701c6c54 (diff)
downloadandroid_bionic-5bcf39842e8c4b02ae557a2765a84e724f762469.tar.gz
android_bionic-5bcf39842e8c4b02ae557a2765a84e724f762469.tar.bz2
android_bionic-5bcf39842e8c4b02ae557a2765a84e724f762469.zip
Reorganize FORTIFY_SOURCE tests.
Get rid of a lot of the duplication in the various FORTIFY_SOURCE tests. Instead, we build 4 separate static libraries, with 4 different compile time options, and link them into the final test binary. Change-Id: Idb0b7cccc8dd837adb037bf4ddfe8942ae138230
Diffstat (limited to 'tests/fortify2_test.cpp')
-rw-r--r--tests/fortify2_test.cpp398
1 files changed, 0 insertions, 398 deletions
diff --git a/tests/fortify2_test.cpp b/tests/fortify2_test.cpp
deleted file mode 100644
index 1fa34cae8..000000000
--- a/tests/fortify2_test.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#undef _FORTIFY_SOURCE
-#define _FORTIFY_SOURCE 2
-
-#include <gtest/gtest.h>
-#include <string.h>
-#include <stdarg.h>
-
-struct foo {
- char empty[0];
- char one[1];
- char a[10];
- char b[10];
-};
-
-// We have to say "DeathTest" here so gtest knows to run this test (which exits)
-// in its own process.
-TEST(Fortify2_DeathTest, strncpy_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- int copy_amt = atoi("11");
- ASSERT_EXIT(strncpy(myfoo.a, "01234567890", copy_amt),
- testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, sprintf_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- char source_buf[15];
- memcpy(source_buf, "12345678901234", 15);
- ASSERT_EXIT(sprintf(myfoo.a, "%s", source_buf),
- testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, sprintf2_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- ASSERT_EXIT(sprintf(myfoo.a, "0123456789"),
- testing::KilledBySignal(SIGABRT), "");
-}
-
-static int vsprintf_helper2(const char *fmt, ...) {
- foo myfoo;
- va_list va;
- int result;
-
- va_start(va, fmt);
- result = vsprintf(myfoo.a, fmt, va); // should crash here
- va_end(va);
- return result;
-}
-
-TEST(Fortify2_DeathTest, vsprintf_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsprintf_helper2("%s", "0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, vsprintf2_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsprintf_helper2("0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-static int vsnprintf_helper2(const char *fmt, ...) {
- foo myfoo;
- va_list va;
- int result;
- size_t size = atoi("11");
-
- va_start(va, fmt);
- result = vsnprintf(myfoo.a, size, fmt, va); // should crash here
- va_end(va);
- return result;
-}
-
-TEST(Fortify2_DeathTest, vsnprintf_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsnprintf_helper2("%s", "0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, vsnprintf2_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsnprintf_helper2("0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-#if __BIONIC__
-// zero sized target with "\0" source (should fail)
-TEST(Fortify2_DeathTest, strcpy_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- char* src = strdup("");
- ASSERT_EXIT(strcpy(myfoo.empty, src),
- testing::KilledBySignal(SIGABRT), "");
- free(src);
-}
-
-// zero sized target with longer source (should fail)
-TEST(Fortify2_DeathTest, strcpy2_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- char* src = strdup("1");
- ASSERT_EXIT(strcpy(myfoo.empty, src),
- testing::KilledBySignal(SIGABRT), "");
- free(src);
-}
-
-// one byte target with longer source (should fail)
-TEST(Fortify2_DeathTest, strcpy3_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- char* src = strdup("12");
- ASSERT_EXIT(strcpy(myfoo.one, src),
- testing::KilledBySignal(SIGABRT), "");
- free(src);
-}
-
-TEST(Fortify2_DeathTest, strchr_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- memcpy(myfoo.a, "0123456789", sizeof(myfoo.a));
- myfoo.b[0] = '\0';
- ASSERT_EXIT(printf("%s", strchr(myfoo.a, 'a')),
- testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strrchr_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- memcpy(myfoo.a, "0123456789", 10);
- memcpy(myfoo.b, "01234", 6);
- ASSERT_EXIT(printf("%s", strrchr(myfoo.a, 'a')),
- testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strlcpy_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- strcpy(myfoo.a, "01");
- size_t n = strlen(myfoo.a);
- ASSERT_EXIT(strlcpy(myfoo.one, myfoo.a, n),
- testing::KilledBySignal(SIGABRT), "");
-}
-
-#endif
-
-TEST(Fortify2_DeathTest, strncat_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- size_t n = atoi("10"); // avoid compiler optimizations
- strncpy(myfoo.a, "012345678", n);
- ASSERT_EXIT(strncat(myfoo.a, "9", n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strncat2_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- myfoo.a[0] = '\0';
- size_t n = atoi("10"); // avoid compiler optimizations
- ASSERT_EXIT(strncat(myfoo.a, "0123456789", n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strncat3_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- memcpy(myfoo.a, "0123456789", sizeof(myfoo.a)); // unterminated string
- myfoo.b[0] = '\0';
- size_t n = atoi("10"); // avoid compiler optimizations
- ASSERT_EXIT(strncat(myfoo.b, myfoo.a, n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strcat_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char src[11];
- strcpy(src, "0123456789");
- foo myfoo;
- myfoo.a[0] = '\0';
- ASSERT_EXIT(strcat(myfoo.a, src), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strcat2_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- memcpy(myfoo.a, "0123456789", sizeof(myfoo.a)); // unterminated string
- myfoo.b[0] = '\0';
- ASSERT_EXIT(strcat(myfoo.b, myfoo.a), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, snprintf_fortified2) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- foo myfoo;
- strcpy(myfoo.a, "012345678");
- size_t n = strlen(myfoo.a) + 2;
- ASSERT_EXIT(snprintf(myfoo.b, n, "a%s", myfoo.a), testing::KilledBySignal(SIGABRT), "");
-}
-
-/***********************************************************/
-/* TESTS BELOW HERE DUPLICATE TESTS FROM fortify1_test.cpp */
-/***********************************************************/
-
-#if __BIONIC__
-// multibyte target where we over fill (should fail)
-TEST(Fortify2_DeathTest, strcpy_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- char *orig = strdup("0123456789");
- ASSERT_EXIT(strcpy(buf, orig), testing::KilledBySignal(SIGABRT), "");
- free(orig);
-}
-
-// zero sized target with "\0" source (should fail)
-TEST(Fortify2_DeathTest, strcpy2_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[0];
- char *orig = strdup("");
- ASSERT_EXIT(strcpy(buf, orig), testing::KilledBySignal(SIGABRT), "");
- free(orig);
-}
-
-// zero sized target with longer source (should fail)
-TEST(Fortify2_DeathTest, strcpy3_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[0];
- char *orig = strdup("1");
- ASSERT_EXIT(strcpy(buf, orig), testing::KilledBySignal(SIGABRT), "");
- free(orig);
-}
-
-// one byte target with longer source (should fail)
-TEST(Fortify2_DeathTest, strcpy4_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[1];
- char *orig = strdup("12");
- ASSERT_EXIT(strcpy(buf, orig), testing::KilledBySignal(SIGABRT), "");
- free(orig);
-}
-
-TEST(Fortify2_DeathTest, strlen_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- memcpy(buf, "0123456789", sizeof(buf));
- ASSERT_EXIT(printf("%d", strlen(buf)), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strchr_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- memcpy(buf, "0123456789", sizeof(buf));
- ASSERT_EXIT(printf("%s", strchr(buf, 'a')), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strrchr_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- memcpy(buf, "0123456789", sizeof(buf));
- ASSERT_EXIT(printf("%s", strrchr(buf, 'a')), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strlcpy_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char bufa[15];
- char bufb[10];
- strcpy(bufa, "01234567890123");
- size_t n = strlen(bufa);
- ASSERT_EXIT(strlcpy(bufb, bufa, n), testing::KilledBySignal(SIGABRT), "");
-}
-
-#endif
-
-TEST(Fortify2_DeathTest, sprintf_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- char source_buf[15];
- memcpy(source_buf, "12345678901234", 15);
- ASSERT_EXIT(sprintf(buf, "%s", source_buf), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, sprintf2_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[5];
- ASSERT_EXIT(sprintf(buf, "aaaaa"), testing::KilledBySignal(SIGABRT), "");
-}
-
-static int vsprintf_helper(const char *fmt, ...) {
- char buf[10];
- va_list va;
- int result;
-
- va_start(va, fmt);
- result = vsprintf(buf, fmt, va); // should crash here
- va_end(va);
- return result;
-}
-
-TEST(Fortify2_DeathTest, vsprintf_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsprintf_helper("%s", "0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, vsprintf2_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsprintf_helper("0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-static int vsnprintf_helper(const char *fmt, ...) {
- char buf[10];
- va_list va;
- int result;
- size_t size = atoi("11");
-
- va_start(va, fmt);
- result = vsnprintf(buf, size, fmt, va); // should crash here
- va_end(va);
- return result;
-}
-
-TEST(Fortify2_DeathTest, vsnprintf_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsnprintf_helper("%s", "0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, vsnprintf2_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- ASSERT_EXIT(vsnprintf_helper("0123456789"), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strncat_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- size_t n = atoi("10"); // avoid compiler optimizations
- strncpy(buf, "012345678", n);
- ASSERT_EXIT(strncat(buf, "9", n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strncat2_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[10];
- buf[0] = '\0';
- size_t n = atoi("10"); // avoid compiler optimizations
- ASSERT_EXIT(strncat(buf, "0123456789", n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strcat_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char src[11];
- strcpy(src, "0123456789");
- char buf[10];
- buf[0] = '\0';
- ASSERT_EXIT(strcat(buf, src), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, memmove_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char buf[20];
- strcpy(buf, "0123456789");
- size_t n = atoi("10");
- ASSERT_EXIT(memmove(buf + 11, buf, n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, memcpy_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char bufa[10];
- char bufb[10];
- strcpy(bufa, "012345678");
- size_t n = atoi("11");
- ASSERT_EXIT(memcpy(bufb, bufa, n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, strncpy_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char bufa[15];
- char bufb[10];
- strcpy(bufa, "01234567890123");
- size_t n = strlen(bufa);
- ASSERT_EXIT(strncpy(bufb, bufa, n), testing::KilledBySignal(SIGABRT), "");
-}
-
-TEST(Fortify2_DeathTest, snprintf_fortified) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- char bufa[15];
- char bufb[10];
- strcpy(bufa, "0123456789");
- size_t n = strlen(bufa) + 1;
- ASSERT_EXIT(snprintf(bufb, n, "%s", bufa), testing::KilledBySignal(SIGABRT), "");
-}