1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project
3*8d67ca89SAndroid Build Coastguard Worker *
4*8d67ca89SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*8d67ca89SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*8d67ca89SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*8d67ca89SAndroid Build Coastguard Worker *
8*8d67ca89SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*8d67ca89SAndroid Build Coastguard Worker *
10*8d67ca89SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*8d67ca89SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*8d67ca89SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8d67ca89SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*8d67ca89SAndroid Build Coastguard Worker * limitations under the License.
15*8d67ca89SAndroid Build Coastguard Worker */
16*8d67ca89SAndroid Build Coastguard Worker
17*8d67ca89SAndroid Build Coastguard Worker #include <gtest/gtest.h>
18*8d67ca89SAndroid Build Coastguard Worker
19*8d67ca89SAndroid Build Coastguard Worker #include <fcntl.h>
20*8d67ca89SAndroid Build Coastguard Worker #include <malloc.h>
21*8d67ca89SAndroid Build Coastguard Worker #include <poll.h>
22*8d67ca89SAndroid Build Coastguard Worker #include <signal.h>
23*8d67ca89SAndroid Build Coastguard Worker #include <stdarg.h>
24*8d67ca89SAndroid Build Coastguard Worker #include <string.h>
25*8d67ca89SAndroid Build Coastguard Worker #include <sys/socket.h>
26*8d67ca89SAndroid Build Coastguard Worker #include <sys/stat.h>
27*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h>
28*8d67ca89SAndroid Build Coastguard Worker #include <time.h>
29*8d67ca89SAndroid Build Coastguard Worker
30*8d67ca89SAndroid Build Coastguard Worker #include <android-base/silent_death_test.h>
31*8d67ca89SAndroid Build Coastguard Worker
32*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
33*8d67ca89SAndroid Build Coastguard Worker #define ASSERT_FORTIFY(expr) ASSERT_EXIT(expr, testing::KilledBySignal(SIGABRT), "FORTIFY")
34*8d67ca89SAndroid Build Coastguard Worker #else
35*8d67ca89SAndroid Build Coastguard Worker #define ASSERT_FORTIFY(expr) ASSERT_EXIT(expr, testing::KilledBySignal(SIGABRT), "")
36*8d67ca89SAndroid Build Coastguard Worker #endif
37*8d67ca89SAndroid Build Coastguard Worker
38*8d67ca89SAndroid Build Coastguard Worker // Fortify test code needs to run multiple times, so TEST_NAME macro is used to
39*8d67ca89SAndroid Build Coastguard Worker // distinguish different tests. TEST_NAME is defined in compilation command.
40*8d67ca89SAndroid Build Coastguard Worker #define DEATHTEST_PASTER(name) name##_DeathTest
41*8d67ca89SAndroid Build Coastguard Worker #define DEATHTEST_EVALUATOR(name) DEATHTEST_PASTER(name)
42*8d67ca89SAndroid Build Coastguard Worker #define DEATHTEST DEATHTEST_EVALUATOR(TEST_NAME)
43*8d67ca89SAndroid Build Coastguard Worker
44*8d67ca89SAndroid Build Coastguard Worker using DEATHTEST = SilentDeathTest;
45*8d67ca89SAndroid Build Coastguard Worker
46*8d67ca89SAndroid Build Coastguard Worker #if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE == 2
47*8d67ca89SAndroid Build Coastguard Worker struct foo {
48*8d67ca89SAndroid Build Coastguard Worker char empty[0];
49*8d67ca89SAndroid Build Coastguard Worker char one[1];
50*8d67ca89SAndroid Build Coastguard Worker char a[10];
51*8d67ca89SAndroid Build Coastguard Worker char b[10];
52*8d67ca89SAndroid Build Coastguard Worker };
53*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,stpncpy_fortified2)54*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, stpncpy_fortified2) {
55*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
56*8d67ca89SAndroid Build Coastguard Worker int copy_amt = atoi("11");
57*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(stpncpy(myfoo.a, "01234567890", copy_amt));
58*8d67ca89SAndroid Build Coastguard Worker }
59*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,stpncpy2_fortified2)60*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, stpncpy2_fortified2) {
61*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
62*8d67ca89SAndroid Build Coastguard Worker memset(&myfoo, 0, sizeof(myfoo));
63*8d67ca89SAndroid Build Coastguard Worker myfoo.one[0] = 'A'; // not null terminated string
64*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(stpncpy(myfoo.b, myfoo.one, sizeof(myfoo.b)));
65*8d67ca89SAndroid Build Coastguard Worker }
66*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncpy_fortified2)67*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncpy_fortified2) {
68*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
69*8d67ca89SAndroid Build Coastguard Worker int copy_amt = atoi("11");
70*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncpy(myfoo.a, "01234567890", copy_amt));
71*8d67ca89SAndroid Build Coastguard Worker }
72*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncpy2_fortified2)73*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncpy2_fortified2) {
74*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
75*8d67ca89SAndroid Build Coastguard Worker memset(&myfoo, 0, sizeof(myfoo));
76*8d67ca89SAndroid Build Coastguard Worker myfoo.one[0] = 'A'; // not null terminated string
77*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncpy(myfoo.b, myfoo.one, sizeof(myfoo.b)));
78*8d67ca89SAndroid Build Coastguard Worker }
79*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,sprintf_fortified2)80*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, sprintf_fortified2) {
81*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
82*8d67ca89SAndroid Build Coastguard Worker char source_buf[15];
83*8d67ca89SAndroid Build Coastguard Worker memcpy(source_buf, "12345678901234", 15);
84*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(sprintf(myfoo.a, "%s", source_buf));
85*8d67ca89SAndroid Build Coastguard Worker }
86*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,sprintf2_fortified2)87*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, sprintf2_fortified2) {
88*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
89*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(sprintf(myfoo.a, "0123456789"));
90*8d67ca89SAndroid Build Coastguard Worker }
91*8d67ca89SAndroid Build Coastguard Worker
vsprintf_helper2(const char * fmt,...)92*8d67ca89SAndroid Build Coastguard Worker static int vsprintf_helper2(const char *fmt, ...) {
93*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
94*8d67ca89SAndroid Build Coastguard Worker va_list va;
95*8d67ca89SAndroid Build Coastguard Worker int result;
96*8d67ca89SAndroid Build Coastguard Worker
97*8d67ca89SAndroid Build Coastguard Worker va_start(va, fmt);
98*8d67ca89SAndroid Build Coastguard Worker result = vsprintf(myfoo.a, fmt, va); // should crash here
99*8d67ca89SAndroid Build Coastguard Worker va_end(va);
100*8d67ca89SAndroid Build Coastguard Worker return result;
101*8d67ca89SAndroid Build Coastguard Worker }
102*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsprintf_fortified2)103*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsprintf_fortified2) {
104*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsprintf_helper2("%s", "0123456789"));
105*8d67ca89SAndroid Build Coastguard Worker }
106*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsprintf2_fortified2)107*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsprintf2_fortified2) {
108*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsprintf_helper2("0123456789"));
109*8d67ca89SAndroid Build Coastguard Worker }
110*8d67ca89SAndroid Build Coastguard Worker
vsnprintf_helper2(const char * fmt,...)111*8d67ca89SAndroid Build Coastguard Worker static int vsnprintf_helper2(const char *fmt, ...) {
112*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
113*8d67ca89SAndroid Build Coastguard Worker va_list va;
114*8d67ca89SAndroid Build Coastguard Worker int result;
115*8d67ca89SAndroid Build Coastguard Worker size_t size = atoi("11");
116*8d67ca89SAndroid Build Coastguard Worker
117*8d67ca89SAndroid Build Coastguard Worker va_start(va, fmt);
118*8d67ca89SAndroid Build Coastguard Worker result = vsnprintf(myfoo.a, size, fmt, va); // should crash here
119*8d67ca89SAndroid Build Coastguard Worker va_end(va);
120*8d67ca89SAndroid Build Coastguard Worker return result;
121*8d67ca89SAndroid Build Coastguard Worker }
122*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsnprintf_fortified2)123*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsnprintf_fortified2) {
124*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsnprintf_helper2("%s", "0123456789"));
125*8d67ca89SAndroid Build Coastguard Worker }
126*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsnprintf2_fortified2)127*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsnprintf2_fortified2) {
128*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsnprintf_helper2("0123456789"));
129*8d67ca89SAndroid Build Coastguard Worker }
130*8d67ca89SAndroid Build Coastguard Worker
131*8d67ca89SAndroid Build Coastguard Worker // zero sized target with "\0" source (should fail)
TEST_F(DEATHTEST,stpcpy_fortified2)132*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, stpcpy_fortified2) {
133*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
134*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
135*8d67ca89SAndroid Build Coastguard Worker char* src = strdup("");
136*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(stpcpy(myfoo.empty, src));
137*8d67ca89SAndroid Build Coastguard Worker free(src);
138*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
139*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "stpcpy not available";
140*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
141*8d67ca89SAndroid Build Coastguard Worker }
142*8d67ca89SAndroid Build Coastguard Worker
143*8d67ca89SAndroid Build Coastguard Worker // zero sized target with "\0" source (should fail)
TEST_F(DEATHTEST,strcpy_fortified2)144*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy_fortified2) {
145*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
146*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
147*8d67ca89SAndroid Build Coastguard Worker char* src = strdup("");
148*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(myfoo.empty, src));
149*8d67ca89SAndroid Build Coastguard Worker free(src);
150*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
151*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
152*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
153*8d67ca89SAndroid Build Coastguard Worker }
154*8d67ca89SAndroid Build Coastguard Worker
155*8d67ca89SAndroid Build Coastguard Worker // zero sized target with longer source (should fail)
TEST_F(DEATHTEST,strcpy2_fortified2)156*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy2_fortified2) {
157*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
158*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
159*8d67ca89SAndroid Build Coastguard Worker char* src = strdup("1");
160*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(myfoo.empty, src));
161*8d67ca89SAndroid Build Coastguard Worker free(src);
162*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
163*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
164*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
165*8d67ca89SAndroid Build Coastguard Worker }
166*8d67ca89SAndroid Build Coastguard Worker
167*8d67ca89SAndroid Build Coastguard Worker // one byte target with longer source (should fail)
TEST_F(DEATHTEST,strcpy3_fortified2)168*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy3_fortified2) {
169*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
170*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
171*8d67ca89SAndroid Build Coastguard Worker char* src = strdup("12");
172*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(myfoo.one, src));
173*8d67ca89SAndroid Build Coastguard Worker free(src);
174*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
175*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
176*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
177*8d67ca89SAndroid Build Coastguard Worker }
178*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strchr_fortified2)179*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strchr_fortified2) {
180*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
181*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
182*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.a, "0123456789", sizeof(myfoo.a));
183*8d67ca89SAndroid Build Coastguard Worker myfoo.b[0] = '\0';
184*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", strchr(myfoo.a, 'a')));
185*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", strchr(static_cast<const char*>(myfoo.a), 'a')));
186*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
187*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
188*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
189*8d67ca89SAndroid Build Coastguard Worker }
190*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strrchr_fortified2)191*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strrchr_fortified2) {
192*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
193*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
194*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.a, "0123456789", 10);
195*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.b, "01234", 6);
196*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", strrchr(myfoo.a, 'a')));
197*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", strrchr(static_cast<const char*>(myfoo.a), 'a')));
198*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
199*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
200*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
201*8d67ca89SAndroid Build Coastguard Worker }
202*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,memchr_fortified2)203*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, memchr_fortified2) {
204*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
205*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
206*8d67ca89SAndroid Build Coastguard Worker volatile int asize = sizeof(myfoo.a) + 1;
207*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.a, "0123456789", sizeof(myfoo.a));
208*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", static_cast<const char*>(memchr(myfoo.a, 'a', asize))));
209*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf(
210*8d67ca89SAndroid Build Coastguard Worker "%s", static_cast<const char*>(memchr(static_cast<const void*>(myfoo.a), 'a', asize))));
211*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
212*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
213*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
214*8d67ca89SAndroid Build Coastguard Worker }
215*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,memrchr_fortified2)216*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, memrchr_fortified2) {
217*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
218*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
219*8d67ca89SAndroid Build Coastguard Worker volatile int asize = sizeof(myfoo.a) + 1;
220*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.a, "0123456789", sizeof(myfoo.a));
221*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", static_cast<const char*>(memrchr(myfoo.a, 'a', asize))));
222*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf(
223*8d67ca89SAndroid Build Coastguard Worker "%s", static_cast<const char*>(memrchr(static_cast<const void*>(myfoo.a), 'a', asize))));
224*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
225*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
226*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
227*8d67ca89SAndroid Build Coastguard Worker }
228*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strlcpy_fortified2)229*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strlcpy_fortified2) {
230*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
231*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
232*8d67ca89SAndroid Build Coastguard Worker strcpy(myfoo.a, "01");
233*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(myfoo.a);
234*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strlcpy(myfoo.one, myfoo.a, n));
235*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
236*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "strlcpy not available";
237*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
238*8d67ca89SAndroid Build Coastguard Worker }
239*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strlcat_fortified2)240*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strlcat_fortified2) {
241*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
242*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
243*8d67ca89SAndroid Build Coastguard Worker strcpy(myfoo.a, "01");
244*8d67ca89SAndroid Build Coastguard Worker myfoo.one[0] = '\0';
245*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(myfoo.a);
246*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strlcat(myfoo.one, myfoo.a, n));
247*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
248*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "strlcat not available";
249*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
250*8d67ca89SAndroid Build Coastguard Worker }
251*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncat_fortified2)252*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncat_fortified2) {
253*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
254*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("10"); // avoid compiler optimizations
255*8d67ca89SAndroid Build Coastguard Worker strncpy(myfoo.a, "012345678", n);
256*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncat(myfoo.a, "9", n));
257*8d67ca89SAndroid Build Coastguard Worker }
258*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncat2_fortified2)259*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncat2_fortified2) {
260*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
261*8d67ca89SAndroid Build Coastguard Worker myfoo.a[0] = '\0';
262*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("10"); // avoid compiler optimizations
263*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncat(myfoo.a, "0123456789", n));
264*8d67ca89SAndroid Build Coastguard Worker }
265*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncat3_fortified2)266*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncat3_fortified2) {
267*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
268*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.a, "0123456789", sizeof(myfoo.a)); // unterminated string
269*8d67ca89SAndroid Build Coastguard Worker myfoo.b[0] = '\0';
270*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("10"); // avoid compiler optimizations
271*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncat(myfoo.b, myfoo.a, n));
272*8d67ca89SAndroid Build Coastguard Worker }
273*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strcat_fortified2)274*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcat_fortified2) {
275*8d67ca89SAndroid Build Coastguard Worker char src[11];
276*8d67ca89SAndroid Build Coastguard Worker strcpy(src, "0123456789");
277*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
278*8d67ca89SAndroid Build Coastguard Worker myfoo.a[0] = '\0';
279*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcat(myfoo.a, src));
280*8d67ca89SAndroid Build Coastguard Worker }
281*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strcat2_fortified2)282*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcat2_fortified2) {
283*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
284*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.a, "0123456789", sizeof(myfoo.a)); // unterminated string
285*8d67ca89SAndroid Build Coastguard Worker myfoo.b[0] = '\0';
286*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcat(myfoo.b, myfoo.a));
287*8d67ca89SAndroid Build Coastguard Worker }
288*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,snprintf_fortified2)289*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, snprintf_fortified2) {
290*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
291*8d67ca89SAndroid Build Coastguard Worker strcpy(myfoo.a, "012345678");
292*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(myfoo.a) + 2;
293*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(snprintf(myfoo.b, n, "a%s", myfoo.a));
294*8d67ca89SAndroid Build Coastguard Worker }
295*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,bzero_fortified2)296*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, bzero_fortified2) {
297*8d67ca89SAndroid Build Coastguard Worker foo myfoo;
298*8d67ca89SAndroid Build Coastguard Worker memcpy(myfoo.b, "0123456789", sizeof(myfoo.b));
299*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("11");
300*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(bzero(myfoo.b, n));
301*8d67ca89SAndroid Build Coastguard Worker }
302*8d67ca89SAndroid Build Coastguard Worker
303*8d67ca89SAndroid Build Coastguard Worker #endif /* defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE=2 */
304*8d67ca89SAndroid Build Coastguard Worker
305*8d67ca89SAndroid Build Coastguard Worker // multibyte target where we over fill (should fail)
TEST_F(DEATHTEST,strcpy_fortified)306*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy_fortified) {
307*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
308*8d67ca89SAndroid Build Coastguard Worker char buf[10];
309*8d67ca89SAndroid Build Coastguard Worker char *orig = strdup("0123456789");
310*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(buf, orig));
311*8d67ca89SAndroid Build Coastguard Worker free(orig);
312*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
313*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
314*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
315*8d67ca89SAndroid Build Coastguard Worker }
316*8d67ca89SAndroid Build Coastguard Worker
317*8d67ca89SAndroid Build Coastguard Worker // zero sized target with "\0" source (should fail)
TEST_F(DEATHTEST,strcpy2_fortified)318*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy2_fortified) {
319*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
320*8d67ca89SAndroid Build Coastguard Worker char buf[0];
321*8d67ca89SAndroid Build Coastguard Worker char *orig = strdup("");
322*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(buf, orig));
323*8d67ca89SAndroid Build Coastguard Worker free(orig);
324*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
325*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
326*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
327*8d67ca89SAndroid Build Coastguard Worker }
328*8d67ca89SAndroid Build Coastguard Worker
329*8d67ca89SAndroid Build Coastguard Worker // zero sized target with longer source (should fail)
TEST_F(DEATHTEST,strcpy3_fortified)330*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy3_fortified) {
331*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
332*8d67ca89SAndroid Build Coastguard Worker char buf[0];
333*8d67ca89SAndroid Build Coastguard Worker char *orig = strdup("1");
334*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(buf, orig));
335*8d67ca89SAndroid Build Coastguard Worker free(orig);
336*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
337*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
338*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
339*8d67ca89SAndroid Build Coastguard Worker }
340*8d67ca89SAndroid Build Coastguard Worker
341*8d67ca89SAndroid Build Coastguard Worker // one byte target with longer source (should fail)
TEST_F(DEATHTEST,strcpy4_fortified)342*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcpy4_fortified) {
343*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
344*8d67ca89SAndroid Build Coastguard Worker char buf[1];
345*8d67ca89SAndroid Build Coastguard Worker char *orig = strdup("12");
346*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcpy(buf, orig));
347*8d67ca89SAndroid Build Coastguard Worker free(orig);
348*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
349*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
350*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
351*8d67ca89SAndroid Build Coastguard Worker }
352*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strlen_fortified)353*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strlen_fortified) {
354*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
355*8d67ca89SAndroid Build Coastguard Worker char buf[10];
356*8d67ca89SAndroid Build Coastguard Worker memcpy(buf, "0123456789", sizeof(buf));
357*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%zd", strlen(buf)));
358*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
359*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
360*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
361*8d67ca89SAndroid Build Coastguard Worker }
362*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strchr_fortified)363*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strchr_fortified) {
364*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
365*8d67ca89SAndroid Build Coastguard Worker char buf[10];
366*8d67ca89SAndroid Build Coastguard Worker memcpy(buf, "0123456789", sizeof(buf));
367*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", strchr(buf, 'a')));
368*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
369*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
370*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
371*8d67ca89SAndroid Build Coastguard Worker }
372*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strrchr_fortified)373*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strrchr_fortified) {
374*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
375*8d67ca89SAndroid Build Coastguard Worker char buf[10];
376*8d67ca89SAndroid Build Coastguard Worker memcpy(buf, "0123456789", sizeof(buf));
377*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(printf("%s", strrchr(buf, 'a')));
378*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
379*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "glibc is broken";
380*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
381*8d67ca89SAndroid Build Coastguard Worker }
382*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strlcpy_fortified)383*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strlcpy_fortified) {
384*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
385*8d67ca89SAndroid Build Coastguard Worker char bufa[15];
386*8d67ca89SAndroid Build Coastguard Worker char bufb[10];
387*8d67ca89SAndroid Build Coastguard Worker strcpy(bufa, "01234567890123");
388*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(bufa);
389*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strlcpy(bufb, bufa, n));
390*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
391*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "strlcpy not available";
392*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
393*8d67ca89SAndroid Build Coastguard Worker }
394*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strlcat_fortified)395*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strlcat_fortified) {
396*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__)
397*8d67ca89SAndroid Build Coastguard Worker char bufa[15];
398*8d67ca89SAndroid Build Coastguard Worker char bufb[10];
399*8d67ca89SAndroid Build Coastguard Worker bufb[0] = '\0';
400*8d67ca89SAndroid Build Coastguard Worker strcpy(bufa, "01234567890123");
401*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(bufa);
402*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strlcat(bufb, bufa, n));
403*8d67ca89SAndroid Build Coastguard Worker #else // __BIONIC__
404*8d67ca89SAndroid Build Coastguard Worker GTEST_SKIP() << "strlcat not available";
405*8d67ca89SAndroid Build Coastguard Worker #endif // __BIONIC__
406*8d67ca89SAndroid Build Coastguard Worker }
407*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,sprintf_fortified)408*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, sprintf_fortified) {
409*8d67ca89SAndroid Build Coastguard Worker char buf[10];
410*8d67ca89SAndroid Build Coastguard Worker char source_buf[15];
411*8d67ca89SAndroid Build Coastguard Worker memcpy(source_buf, "12345678901234", 15);
412*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(sprintf(buf, "%s", source_buf));
413*8d67ca89SAndroid Build Coastguard Worker }
414*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,sprintf_malloc_fortified)415*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, sprintf_malloc_fortified) {
416*8d67ca89SAndroid Build Coastguard Worker char* buf = (char *) malloc(10);
417*8d67ca89SAndroid Build Coastguard Worker char source_buf[11];
418*8d67ca89SAndroid Build Coastguard Worker memcpy(source_buf, "1234567890", 11);
419*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(sprintf(buf, "%s", source_buf));
420*8d67ca89SAndroid Build Coastguard Worker free(buf);
421*8d67ca89SAndroid Build Coastguard Worker }
422*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,sprintf2_fortified)423*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, sprintf2_fortified) {
424*8d67ca89SAndroid Build Coastguard Worker char buf[5];
425*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(sprintf(buf, "aaaaa"));
426*8d67ca89SAndroid Build Coastguard Worker }
427*8d67ca89SAndroid Build Coastguard Worker
vsprintf_helper(const char * fmt,...)428*8d67ca89SAndroid Build Coastguard Worker static int vsprintf_helper(const char *fmt, ...) {
429*8d67ca89SAndroid Build Coastguard Worker char buf[10];
430*8d67ca89SAndroid Build Coastguard Worker va_list va;
431*8d67ca89SAndroid Build Coastguard Worker int result;
432*8d67ca89SAndroid Build Coastguard Worker
433*8d67ca89SAndroid Build Coastguard Worker va_start(va, fmt);
434*8d67ca89SAndroid Build Coastguard Worker result = vsprintf(buf, fmt, va); // should crash here
435*8d67ca89SAndroid Build Coastguard Worker va_end(va);
436*8d67ca89SAndroid Build Coastguard Worker return result;
437*8d67ca89SAndroid Build Coastguard Worker }
438*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsprintf_fortified)439*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsprintf_fortified) {
440*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsprintf_helper("%s", "0123456789"));
441*8d67ca89SAndroid Build Coastguard Worker }
442*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsprintf2_fortified)443*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsprintf2_fortified) {
444*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsprintf_helper("0123456789"));
445*8d67ca89SAndroid Build Coastguard Worker }
446*8d67ca89SAndroid Build Coastguard Worker
vsnprintf_helper(const char * fmt,...)447*8d67ca89SAndroid Build Coastguard Worker static int vsnprintf_helper(const char *fmt, ...) {
448*8d67ca89SAndroid Build Coastguard Worker char buf[10];
449*8d67ca89SAndroid Build Coastguard Worker va_list va;
450*8d67ca89SAndroid Build Coastguard Worker int result;
451*8d67ca89SAndroid Build Coastguard Worker size_t size = atoi("11");
452*8d67ca89SAndroid Build Coastguard Worker
453*8d67ca89SAndroid Build Coastguard Worker va_start(va, fmt);
454*8d67ca89SAndroid Build Coastguard Worker result = vsnprintf(buf, size, fmt, va); // should crash here
455*8d67ca89SAndroid Build Coastguard Worker va_end(va);
456*8d67ca89SAndroid Build Coastguard Worker return result;
457*8d67ca89SAndroid Build Coastguard Worker }
458*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsnprintf_fortified)459*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsnprintf_fortified) {
460*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsnprintf_helper("%s", "0123456789"));
461*8d67ca89SAndroid Build Coastguard Worker }
462*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,vsnprintf2_fortified)463*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, vsnprintf2_fortified) {
464*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(vsnprintf_helper("0123456789"));
465*8d67ca89SAndroid Build Coastguard Worker }
466*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncat_fortified)467*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncat_fortified) {
468*8d67ca89SAndroid Build Coastguard Worker char buf[10];
469*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("10"); // avoid compiler optimizations
470*8d67ca89SAndroid Build Coastguard Worker strncpy(buf, "012345678", n);
471*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncat(buf, "9", n));
472*8d67ca89SAndroid Build Coastguard Worker }
473*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncat2_fortified)474*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncat2_fortified) {
475*8d67ca89SAndroid Build Coastguard Worker char buf[10];
476*8d67ca89SAndroid Build Coastguard Worker buf[0] = '\0';
477*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("10"); // avoid compiler optimizations
478*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncat(buf, "0123456789", n));
479*8d67ca89SAndroid Build Coastguard Worker }
480*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strcat_fortified)481*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strcat_fortified) {
482*8d67ca89SAndroid Build Coastguard Worker char src[11];
483*8d67ca89SAndroid Build Coastguard Worker strcpy(src, "0123456789");
484*8d67ca89SAndroid Build Coastguard Worker char buf[10];
485*8d67ca89SAndroid Build Coastguard Worker buf[0] = '\0';
486*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strcat(buf, src));
487*8d67ca89SAndroid Build Coastguard Worker }
488*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,memmove_fortified)489*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, memmove_fortified) {
490*8d67ca89SAndroid Build Coastguard Worker char buf[20];
491*8d67ca89SAndroid Build Coastguard Worker strcpy(buf, "0123456789");
492*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("10");
493*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(memmove(buf + 11, buf, n));
494*8d67ca89SAndroid Build Coastguard Worker }
495*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,memcpy_fortified)496*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, memcpy_fortified) {
497*8d67ca89SAndroid Build Coastguard Worker char bufa[10];
498*8d67ca89SAndroid Build Coastguard Worker char bufb[10];
499*8d67ca89SAndroid Build Coastguard Worker strcpy(bufa, "012345678");
500*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("11");
501*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(memcpy(bufb, bufa, n));
502*8d67ca89SAndroid Build Coastguard Worker }
503*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,memset_fortified)504*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, memset_fortified) {
505*8d67ca89SAndroid Build Coastguard Worker char buf[10];
506*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("11");
507*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(memset(buf, 0, n));
508*8d67ca89SAndroid Build Coastguard Worker }
509*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,stpncpy_fortified)510*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, stpncpy_fortified) {
511*8d67ca89SAndroid Build Coastguard Worker char bufa[15];
512*8d67ca89SAndroid Build Coastguard Worker char bufb[10];
513*8d67ca89SAndroid Build Coastguard Worker strcpy(bufa, "01234567890123");
514*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(bufa);
515*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(stpncpy(bufb, bufa, n));
516*8d67ca89SAndroid Build Coastguard Worker }
517*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,stpncpy2_fortified)518*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, stpncpy2_fortified) {
519*8d67ca89SAndroid Build Coastguard Worker char dest[11];
520*8d67ca89SAndroid Build Coastguard Worker char src[10];
521*8d67ca89SAndroid Build Coastguard Worker memcpy(src, "0123456789", sizeof(src)); // src is not null terminated
522*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(stpncpy(dest, src, sizeof(dest)));
523*8d67ca89SAndroid Build Coastguard Worker }
524*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncpy_fortified)525*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncpy_fortified) {
526*8d67ca89SAndroid Build Coastguard Worker char bufa[15];
527*8d67ca89SAndroid Build Coastguard Worker char bufb[10];
528*8d67ca89SAndroid Build Coastguard Worker strcpy(bufa, "01234567890123");
529*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(bufa);
530*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncpy(bufb, bufa, n));
531*8d67ca89SAndroid Build Coastguard Worker }
532*8d67ca89SAndroid Build Coastguard Worker
533*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,strncpy2_fortified)534*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, strncpy2_fortified) {
535*8d67ca89SAndroid Build Coastguard Worker char dest[11];
536*8d67ca89SAndroid Build Coastguard Worker char src[10];
537*8d67ca89SAndroid Build Coastguard Worker memcpy(src, "0123456789", sizeof(src)); // src is not null terminated
538*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(strncpy(dest, src, sizeof(dest)));
539*8d67ca89SAndroid Build Coastguard Worker }
540*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,snprintf_fortified)541*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, snprintf_fortified) {
542*8d67ca89SAndroid Build Coastguard Worker char bufa[15];
543*8d67ca89SAndroid Build Coastguard Worker char bufb[10];
544*8d67ca89SAndroid Build Coastguard Worker strcpy(bufa, "0123456789");
545*8d67ca89SAndroid Build Coastguard Worker size_t n = strlen(bufa) + 1;
546*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(snprintf(bufb, n, "%s", bufa));
547*8d67ca89SAndroid Build Coastguard Worker }
548*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,bzero_fortified)549*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, bzero_fortified) {
550*8d67ca89SAndroid Build Coastguard Worker char buf[10];
551*8d67ca89SAndroid Build Coastguard Worker memcpy(buf, "0123456789", sizeof(buf));
552*8d67ca89SAndroid Build Coastguard Worker size_t n = atoi("11");
553*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(bzero(buf, n));
554*8d67ca89SAndroid Build Coastguard Worker }
555*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,umask_fortified)556*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, umask_fortified) {
557*8d67ca89SAndroid Build Coastguard Worker mode_t mask = atoi("1023"); // 01777 in octal
558*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(umask(mask));
559*8d67ca89SAndroid Build Coastguard Worker }
560*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,recv_fortified)561*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, recv_fortified) {
562*8d67ca89SAndroid Build Coastguard Worker size_t data_len = atoi("11"); // suppress compiler optimizations
563*8d67ca89SAndroid Build Coastguard Worker char buf[10];
564*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(recv(0, buf, data_len, 0));
565*8d67ca89SAndroid Build Coastguard Worker }
566*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,send_fortified)567*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, send_fortified) {
568*8d67ca89SAndroid Build Coastguard Worker size_t data_len = atoi("11"); // suppress compiler optimizations
569*8d67ca89SAndroid Build Coastguard Worker char buf[10] = {0};
570*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(send(0, buf, data_len, 0));
571*8d67ca89SAndroid Build Coastguard Worker }
572*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,FD_ISSET_fortified)573*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, FD_ISSET_fortified) {
574*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__) // glibc catches this at compile-time.
575*8d67ca89SAndroid Build Coastguard Worker fd_set set;
576*8d67ca89SAndroid Build Coastguard Worker memset(&set, 0, sizeof(set));
577*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(FD_ISSET(-1, &set));
578*8d67ca89SAndroid Build Coastguard Worker #endif
579*8d67ca89SAndroid Build Coastguard Worker }
580*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,FD_ISSET_2_fortified)581*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, FD_ISSET_2_fortified) {
582*8d67ca89SAndroid Build Coastguard Worker char buf[1];
583*8d67ca89SAndroid Build Coastguard Worker fd_set* set = (fd_set*) buf;
584*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(FD_ISSET(0, set));
585*8d67ca89SAndroid Build Coastguard Worker }
586*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,getcwd_fortified)587*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, getcwd_fortified) {
588*8d67ca89SAndroid Build Coastguard Worker char buf[1];
589*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
590*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(getcwd(buf, ct));
591*8d67ca89SAndroid Build Coastguard Worker }
592*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,pread_fortified)593*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, pread_fortified) {
594*8d67ca89SAndroid Build Coastguard Worker char buf[1];
595*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
596*8d67ca89SAndroid Build Coastguard Worker int fd = open("/dev/null", O_RDONLY);
597*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(pread(fd, buf, ct, 0));
598*8d67ca89SAndroid Build Coastguard Worker close(fd);
599*8d67ca89SAndroid Build Coastguard Worker }
600*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,pread64_fortified)601*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, pread64_fortified) {
602*8d67ca89SAndroid Build Coastguard Worker char buf[1];
603*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
604*8d67ca89SAndroid Build Coastguard Worker int fd = open("/dev/null", O_RDONLY);
605*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(pread64(fd, buf, ct, 0));
606*8d67ca89SAndroid Build Coastguard Worker close(fd);
607*8d67ca89SAndroid Build Coastguard Worker }
608*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,pwrite_fortified)609*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, pwrite_fortified) {
610*8d67ca89SAndroid Build Coastguard Worker char buf[1] = {0};
611*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
612*8d67ca89SAndroid Build Coastguard Worker int fd = open("/dev/null", O_WRONLY);
613*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(pwrite(fd, buf, ct, 0));
614*8d67ca89SAndroid Build Coastguard Worker close(fd);
615*8d67ca89SAndroid Build Coastguard Worker }
616*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,pwrite64_fortified)617*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, pwrite64_fortified) {
618*8d67ca89SAndroid Build Coastguard Worker char buf[1] = {0};
619*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
620*8d67ca89SAndroid Build Coastguard Worker int fd = open("/dev/null", O_WRONLY);
621*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(pwrite64(fd, buf, ct, 0));
622*8d67ca89SAndroid Build Coastguard Worker close(fd);
623*8d67ca89SAndroid Build Coastguard Worker }
624*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,read_fortified)625*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, read_fortified) {
626*8d67ca89SAndroid Build Coastguard Worker char buf[1];
627*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
628*8d67ca89SAndroid Build Coastguard Worker int fd = open("/dev/null", O_RDONLY);
629*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(read(fd, buf, ct));
630*8d67ca89SAndroid Build Coastguard Worker close(fd);
631*8d67ca89SAndroid Build Coastguard Worker }
632*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,write_fortified)633*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, write_fortified) {
634*8d67ca89SAndroid Build Coastguard Worker char buf[1] = {0};
635*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
636*8d67ca89SAndroid Build Coastguard Worker int fd = open("/dev/null", O_WRONLY);
637*8d67ca89SAndroid Build Coastguard Worker ASSERT_EXIT(write(fd, buf, ct), testing::KilledBySignal(SIGABRT), "");
638*8d67ca89SAndroid Build Coastguard Worker close(fd);
639*8d67ca89SAndroid Build Coastguard Worker }
640*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,fread_fortified)641*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, fread_fortified) {
642*8d67ca89SAndroid Build Coastguard Worker char buf[1];
643*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
644*8d67ca89SAndroid Build Coastguard Worker FILE* fp = fopen("/dev/null", "r");
645*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(fread(buf, 1, ct, fp));
646*8d67ca89SAndroid Build Coastguard Worker fclose(fp);
647*8d67ca89SAndroid Build Coastguard Worker }
648*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,fwrite_fortified)649*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, fwrite_fortified) {
650*8d67ca89SAndroid Build Coastguard Worker char buf[1] = {0};
651*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
652*8d67ca89SAndroid Build Coastguard Worker FILE* fp = fopen("/dev/null", "w");
653*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(fwrite(buf, 1, ct, fp));
654*8d67ca89SAndroid Build Coastguard Worker fclose(fp);
655*8d67ca89SAndroid Build Coastguard Worker }
656*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,readlink_fortified)657*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, readlink_fortified) {
658*8d67ca89SAndroid Build Coastguard Worker char buf[1];
659*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
660*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(readlink("/dev/null", buf, ct));
661*8d67ca89SAndroid Build Coastguard Worker }
662*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,readlinkat_fortified)663*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, readlinkat_fortified) {
664*8d67ca89SAndroid Build Coastguard Worker char buf[1];
665*8d67ca89SAndroid Build Coastguard Worker size_t ct = atoi("2"); // prevent optimizations
666*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(readlinkat(AT_FDCWD, "/dev/null", buf, ct));
667*8d67ca89SAndroid Build Coastguard Worker }
668*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,snprintf_nullptr_valid)669*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, snprintf_nullptr_valid) {
670*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(10, snprintf(nullptr, 0, "0123456789"));
671*8d67ca89SAndroid Build Coastguard Worker }
672*8d67ca89SAndroid Build Coastguard Worker
673*8d67ca89SAndroid Build Coastguard Worker extern "C" char* __strncat_chk(char*, const char*, size_t, size_t);
674*8d67ca89SAndroid Build Coastguard Worker extern "C" char* __strcat_chk(char*, const char*, size_t);
675*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncat)676*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncat) {
677*8d67ca89SAndroid Build Coastguard Worker char buf[10];
678*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
679*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
680*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
681*8d67ca89SAndroid Build Coastguard Worker char* res = __strncat_chk(buf, "01234", sizeof(buf) - strlen(buf) - 1, sizeof(buf));
682*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
683*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
684*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
685*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
686*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
687*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
688*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
689*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[6]);
690*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[7]);
691*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[8]);
692*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[9]);
693*8d67ca89SAndroid Build Coastguard Worker }
694*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncat2)695*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncat2) {
696*8d67ca89SAndroid Build Coastguard Worker char buf[10];
697*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
698*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
699*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
700*8d67ca89SAndroid Build Coastguard Worker char* res = __strncat_chk(buf, "0123456789", 5, sizeof(buf));
701*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
702*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
703*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
704*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
705*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
706*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
707*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
708*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[6]);
709*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[7]);
710*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[8]);
711*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[9]);
712*8d67ca89SAndroid Build Coastguard Worker }
713*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncat3)714*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncat3) {
715*8d67ca89SAndroid Build Coastguard Worker char buf[10];
716*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
717*8d67ca89SAndroid Build Coastguard Worker buf[0] = '\0';
718*8d67ca89SAndroid Build Coastguard Worker char* res = __strncat_chk(buf, "0123456789", 5, sizeof(buf));
719*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
720*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[0]);
721*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[1]);
722*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[2]);
723*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[3]);
724*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[4]);
725*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[5]);
726*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[6]);
727*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[7]);
728*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[8]);
729*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[9]);
730*8d67ca89SAndroid Build Coastguard Worker }
731*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncat4)732*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncat4) {
733*8d67ca89SAndroid Build Coastguard Worker char buf[10];
734*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
735*8d67ca89SAndroid Build Coastguard Worker buf[9] = '\0';
736*8d67ca89SAndroid Build Coastguard Worker char* res = __strncat_chk(buf, "", 5, sizeof(buf));
737*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
738*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[0]);
739*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[1]);
740*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[2]);
741*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[3]);
742*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[4]);
743*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[5]);
744*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[6]);
745*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[7]);
746*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[8]);
747*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[9]);
748*8d67ca89SAndroid Build Coastguard Worker }
749*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncat5)750*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncat5) {
751*8d67ca89SAndroid Build Coastguard Worker char buf[10];
752*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
753*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
754*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
755*8d67ca89SAndroid Build Coastguard Worker char* res = __strncat_chk(buf, "01234567", 8, sizeof(buf));
756*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
757*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
758*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
759*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
760*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
761*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
762*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
763*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', buf[6]);
764*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', buf[7]);
765*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', buf[8]);
766*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[9]);
767*8d67ca89SAndroid Build Coastguard Worker }
768*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncat6)769*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncat6) {
770*8d67ca89SAndroid Build Coastguard Worker char buf[10];
771*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
772*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
773*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
774*8d67ca89SAndroid Build Coastguard Worker char* res = __strncat_chk(buf, "01234567", 9, sizeof(buf));
775*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
776*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
777*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
778*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
779*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
780*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
781*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
782*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', buf[6]);
783*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', buf[7]);
784*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', buf[8]);
785*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[9]);
786*8d67ca89SAndroid Build Coastguard Worker }
787*8d67ca89SAndroid Build Coastguard Worker
788*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strcat)789*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strcat) {
790*8d67ca89SAndroid Build Coastguard Worker char buf[10];
791*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
792*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
793*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
794*8d67ca89SAndroid Build Coastguard Worker char* res = __strcat_chk(buf, "01234", sizeof(buf));
795*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
796*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
797*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
798*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
799*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
800*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
801*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
802*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[6]);
803*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[7]);
804*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[8]);
805*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('A', buf[9]);
806*8d67ca89SAndroid Build Coastguard Worker }
807*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strcat2)808*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strcat2) {
809*8d67ca89SAndroid Build Coastguard Worker char buf[10];
810*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
811*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
812*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
813*8d67ca89SAndroid Build Coastguard Worker char* res = __strcat_chk(buf, "01234567", sizeof(buf));
814*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
815*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
816*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
817*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
818*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
819*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
820*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
821*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', buf[6]);
822*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', buf[7]);
823*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', buf[8]);
824*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[9]);
825*8d67ca89SAndroid Build Coastguard Worker }
826*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,stpncpy)827*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, stpncpy) {
828*8d67ca89SAndroid Build Coastguard Worker char src[10];
829*8d67ca89SAndroid Build Coastguard Worker char dst[10];
830*8d67ca89SAndroid Build Coastguard Worker memcpy(src, "0123456789", sizeof(src)); // non null terminated string
831*8d67ca89SAndroid Build Coastguard Worker stpncpy(dst, src, sizeof(dst));
832*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', dst[0]);
833*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', dst[1]);
834*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', dst[2]);
835*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', dst[3]);
836*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', dst[4]);
837*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', dst[5]);
838*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', dst[6]);
839*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', dst[7]);
840*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('8', dst[8]);
841*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('9', dst[9]);
842*8d67ca89SAndroid Build Coastguard Worker }
843*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,stpncpy2)844*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, stpncpy2) {
845*8d67ca89SAndroid Build Coastguard Worker char src[10];
846*8d67ca89SAndroid Build Coastguard Worker char dst[15];
847*8d67ca89SAndroid Build Coastguard Worker memcpy(src, "012345678\0", sizeof(src));
848*8d67ca89SAndroid Build Coastguard Worker stpncpy(dst, src, sizeof(dst));
849*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', dst[0]);
850*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', dst[1]);
851*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', dst[2]);
852*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', dst[3]);
853*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', dst[4]);
854*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', dst[5]);
855*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', dst[6]);
856*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', dst[7]);
857*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('8', dst[8]);
858*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[9]);
859*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[10]);
860*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[11]);
861*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[12]);
862*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[13]);
863*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[14]);
864*8d67ca89SAndroid Build Coastguard Worker }
865*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncpy)866*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncpy) {
867*8d67ca89SAndroid Build Coastguard Worker char src[10];
868*8d67ca89SAndroid Build Coastguard Worker char dst[10];
869*8d67ca89SAndroid Build Coastguard Worker memcpy(src, "0123456789", sizeof(src)); // non null terminated string
870*8d67ca89SAndroid Build Coastguard Worker strncpy(dst, src, sizeof(dst));
871*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', dst[0]);
872*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', dst[1]);
873*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', dst[2]);
874*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', dst[3]);
875*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', dst[4]);
876*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', dst[5]);
877*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', dst[6]);
878*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', dst[7]);
879*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('8', dst[8]);
880*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('9', dst[9]);
881*8d67ca89SAndroid Build Coastguard Worker }
882*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strncpy2)883*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strncpy2) {
884*8d67ca89SAndroid Build Coastguard Worker char src[10];
885*8d67ca89SAndroid Build Coastguard Worker char dst[15];
886*8d67ca89SAndroid Build Coastguard Worker memcpy(src, "012345678\0", sizeof(src));
887*8d67ca89SAndroid Build Coastguard Worker strncpy(dst, src, sizeof(dst));
888*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', dst[0]);
889*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', dst[1]);
890*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', dst[2]);
891*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', dst[3]);
892*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', dst[4]);
893*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', dst[5]);
894*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', dst[6]);
895*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', dst[7]);
896*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('8', dst[8]);
897*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[9]);
898*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[10]);
899*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[11]);
900*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[12]);
901*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[13]);
902*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', dst[14]);
903*8d67ca89SAndroid Build Coastguard Worker }
904*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strcat_chk_max_int_size)905*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strcat_chk_max_int_size) {
906*8d67ca89SAndroid Build Coastguard Worker char buf[10];
907*8d67ca89SAndroid Build Coastguard Worker memset(buf, 'A', sizeof(buf));
908*8d67ca89SAndroid Build Coastguard Worker buf[0] = 'a';
909*8d67ca89SAndroid Build Coastguard Worker buf[1] = '\0';
910*8d67ca89SAndroid Build Coastguard Worker char* res = __strcat_chk(buf, "01234567", (size_t)-1);
911*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
912*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('a', buf[0]);
913*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[1]);
914*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[2]);
915*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[3]);
916*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[4]);
917*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[5]);
918*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', buf[6]);
919*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', buf[7]);
920*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', buf[8]);
921*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[9]);
922*8d67ca89SAndroid Build Coastguard Worker }
923*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,mempcpy_chk)924*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, mempcpy_chk) {
925*8d67ca89SAndroid Build Coastguard Worker const char input_str[] = "abcdefg";
926*8d67ca89SAndroid Build Coastguard Worker size_t input_str_size = strlen(input_str) + 1;
927*8d67ca89SAndroid Build Coastguard Worker
928*8d67ca89SAndroid Build Coastguard Worker char buf1[10] = {};
929*8d67ca89SAndroid Build Coastguard Worker char buf2[10] = {};
930*8d67ca89SAndroid Build Coastguard Worker
931*8d67ca89SAndroid Build Coastguard Worker __builtin_mempcpy(buf1, input_str, input_str_size);
932*8d67ca89SAndroid Build Coastguard Worker __builtin___mempcpy_chk(buf2, input_str, input_str_size, __bos0(buf2));
933*8d67ca89SAndroid Build Coastguard Worker
934*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(memcmp(buf1, buf2, sizeof(buf2)), 0);
935*8d67ca89SAndroid Build Coastguard Worker
936*8d67ca89SAndroid Build Coastguard Worker void *builtin_ptr = __builtin_mempcpy(buf1, input_str, input_str_size);
937*8d67ca89SAndroid Build Coastguard Worker void *fortify_ptr = __builtin___mempcpy_chk(buf1, input_str, input_str_size, __bos0(buf2));
938*8d67ca89SAndroid Build Coastguard Worker
939*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(builtin_ptr, fortify_ptr);
940*8d67ca89SAndroid Build Coastguard Worker }
941*8d67ca89SAndroid Build Coastguard Worker
942*8d67ca89SAndroid Build Coastguard Worker extern "C" char* __stpcpy_chk(char*, const char*, size_t);
943*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,stpcpy_chk_max_int_size)944*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, stpcpy_chk_max_int_size) {
945*8d67ca89SAndroid Build Coastguard Worker char buf[10];
946*8d67ca89SAndroid Build Coastguard Worker char* res = __stpcpy_chk(buf, "012345678", (size_t)-1);
947*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf + strlen("012345678"), res);
948*8d67ca89SAndroid Build Coastguard Worker ASSERT_STREQ("012345678", buf);
949*8d67ca89SAndroid Build Coastguard Worker }
950*8d67ca89SAndroid Build Coastguard Worker
951*8d67ca89SAndroid Build Coastguard Worker extern "C" char* __strcpy_chk(char*, const char*, size_t);
952*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,strcpy_chk_max_int_size)953*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, strcpy_chk_max_int_size) {
954*8d67ca89SAndroid Build Coastguard Worker char buf[10];
955*8d67ca89SAndroid Build Coastguard Worker char* res = __strcpy_chk(buf, "012345678", (size_t)-1);
956*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ(buf, res);
957*8d67ca89SAndroid Build Coastguard Worker ASSERT_STREQ("012345678", buf);
958*8d67ca89SAndroid Build Coastguard Worker }
959*8d67ca89SAndroid Build Coastguard Worker
960*8d67ca89SAndroid Build Coastguard Worker extern "C" void* __memcpy_chk(void*, const void*, size_t, size_t);
961*8d67ca89SAndroid Build Coastguard Worker
TEST(TEST_NAME,memcpy_chk_max_int_size)962*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, memcpy_chk_max_int_size) {
963*8d67ca89SAndroid Build Coastguard Worker char buf[10];
964*8d67ca89SAndroid Build Coastguard Worker void* res = __memcpy_chk(buf, "012345678", sizeof(buf), (size_t)-1);
965*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ((void*)buf, res);
966*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('0', buf[0]);
967*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('1', buf[1]);
968*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('2', buf[2]);
969*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('3', buf[3]);
970*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('4', buf[4]);
971*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('5', buf[5]);
972*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('6', buf[6]);
973*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('7', buf[7]);
974*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('8', buf[8]);
975*8d67ca89SAndroid Build Coastguard Worker ASSERT_EQ('\0', buf[9]);
976*8d67ca89SAndroid Build Coastguard Worker }
977*8d67ca89SAndroid Build Coastguard Worker
978*8d67ca89SAndroid Build Coastguard Worker // Verify that macro expansion is done properly for sprintf/snprintf (which
979*8d67ca89SAndroid Build Coastguard Worker // are defined as macros in stdio.h under clang).
980*8d67ca89SAndroid Build Coastguard Worker #define CONTENTS "macro expansion"
981*8d67ca89SAndroid Build Coastguard Worker #define BUF_AND_SIZE(A) A, sizeof(A)
982*8d67ca89SAndroid Build Coastguard Worker #define BUF_AND_CONTENTS(A) A, CONTENTS
983*8d67ca89SAndroid Build Coastguard Worker #define BUF_AND_SIZE_AND_CONTENTS(A) A, sizeof(A), CONTENTS
TEST(TEST_NAME,s_n_printf_macro_expansion)984*8d67ca89SAndroid Build Coastguard Worker TEST(TEST_NAME, s_n_printf_macro_expansion) {
985*8d67ca89SAndroid Build Coastguard Worker char buf[BUFSIZ];
986*8d67ca89SAndroid Build Coastguard Worker snprintf(BUF_AND_SIZE(buf), CONTENTS);
987*8d67ca89SAndroid Build Coastguard Worker EXPECT_STREQ(CONTENTS, buf);
988*8d67ca89SAndroid Build Coastguard Worker
989*8d67ca89SAndroid Build Coastguard Worker snprintf(BUF_AND_SIZE_AND_CONTENTS(buf));
990*8d67ca89SAndroid Build Coastguard Worker EXPECT_STREQ(CONTENTS, buf);
991*8d67ca89SAndroid Build Coastguard Worker
992*8d67ca89SAndroid Build Coastguard Worker sprintf(BUF_AND_CONTENTS(buf));
993*8d67ca89SAndroid Build Coastguard Worker EXPECT_STREQ(CONTENTS, buf);
994*8d67ca89SAndroid Build Coastguard Worker }
995*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,poll_fortified)996*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, poll_fortified) {
997*8d67ca89SAndroid Build Coastguard Worker nfds_t fd_count = atoi("2"); // suppress compiler optimizations
998*8d67ca89SAndroid Build Coastguard Worker pollfd buf[1] = {{0, POLLIN, 0}};
999*8d67ca89SAndroid Build Coastguard Worker // Set timeout to zero to prevent waiting in poll when fortify test fails.
1000*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(poll(buf, fd_count, 0));
1001*8d67ca89SAndroid Build Coastguard Worker }
1002*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,ppoll_fortified)1003*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, ppoll_fortified) {
1004*8d67ca89SAndroid Build Coastguard Worker nfds_t fd_count = atoi("2"); // suppress compiler optimizations
1005*8d67ca89SAndroid Build Coastguard Worker pollfd buf[1] = {{0, POLLIN, 0}};
1006*8d67ca89SAndroid Build Coastguard Worker // Set timeout to zero to prevent waiting in ppoll when fortify test fails.
1007*8d67ca89SAndroid Build Coastguard Worker timespec timeout;
1008*8d67ca89SAndroid Build Coastguard Worker timeout.tv_sec = timeout.tv_nsec = 0;
1009*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(ppoll(buf, fd_count, &timeout, nullptr));
1010*8d67ca89SAndroid Build Coastguard Worker }
1011*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,ppoll64_fortified)1012*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, ppoll64_fortified) {
1013*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC__) // glibc doesn't have ppoll64.
1014*8d67ca89SAndroid Build Coastguard Worker nfds_t fd_count = atoi("2"); // suppress compiler optimizations
1015*8d67ca89SAndroid Build Coastguard Worker pollfd buf[1] = {{0, POLLIN, 0}};
1016*8d67ca89SAndroid Build Coastguard Worker // Set timeout to zero to prevent waiting in ppoll when fortify test fails.
1017*8d67ca89SAndroid Build Coastguard Worker timespec timeout;
1018*8d67ca89SAndroid Build Coastguard Worker timeout.tv_sec = timeout.tv_nsec = 0;
1019*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(ppoll64(buf, fd_count, &timeout, nullptr));
1020*8d67ca89SAndroid Build Coastguard Worker #endif
1021*8d67ca89SAndroid Build Coastguard Worker }
1022*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,open_O_CREAT_without_mode_fortified)1023*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, open_O_CREAT_without_mode_fortified) {
1024*8d67ca89SAndroid Build Coastguard Worker int flags = O_CREAT; // Fool the compiler.
1025*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(open("", flags));
1026*8d67ca89SAndroid Build Coastguard Worker }
1027*8d67ca89SAndroid Build Coastguard Worker
TEST_F(DEATHTEST,open_O_TMPFILE_without_mode_fortified)1028*8d67ca89SAndroid Build Coastguard Worker TEST_F(DEATHTEST, open_O_TMPFILE_without_mode_fortified) {
1029*8d67ca89SAndroid Build Coastguard Worker int flags = O_TMPFILE; // Fool the compiler.
1030*8d67ca89SAndroid Build Coastguard Worker ASSERT_FORTIFY(open("", flags));
1031*8d67ca89SAndroid Build Coastguard Worker }
1032