summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/string.h2
-rw-r--r--tests/test_strncat_dynamic_write.c2
-rw-r--r--tests/test_strncat_static_write.c7
3 files changed, 9 insertions, 2 deletions
diff --git a/include/string.h b/include/string.h
index 89bf25e..2e2b29c 100644
--- a/include/string.h
+++ b/include/string.h
@@ -287,6 +287,7 @@ _FORTIFY_FN(strncat) char *strncat(char * _FORTIFY_POS0 __d, const char *__s,
287#if __has_builtin(__builtin___strncat_chk) && FORTIFY_USE_NATIVE_CHK 287#if __has_builtin(__builtin___strncat_chk) && FORTIFY_USE_NATIVE_CHK
288 return __builtin___strncat_chk(__d, __s, __n, __fh_bos(__d, 0)); 288 return __builtin___strncat_chk(__d, __s, __n, __fh_bos(__d, 0));
289#else 289#else
290#if 0 // strlen(__s) isn't guaranteed to be valid.
290 __fh_size_t __b = __fh_bos(__d, 0); 291 __fh_size_t __b = __fh_bos(__d, 0);
291 292
292 if (__n > __b) { 293 if (__n > __b) {
@@ -297,6 +298,7 @@ _FORTIFY_FN(strncat) char *strncat(char * _FORTIFY_POS0 __d, const char *__s,
297 if (__sl + __dl + 1 > __b) 298 if (__sl + __dl + 1 > __b)
298 __builtin_trap(); 299 __builtin_trap();
299 } 300 }
301#endif
300 return __orig_strncat(__d, __s, __n); 302 return __orig_strncat(__d, __s, __n);
301#endif 303#endif
302} 304}
diff --git a/tests/test_strncat_dynamic_write.c b/tests/test_strncat_dynamic_write.c
index c538339..d5c5a94 100644
--- a/tests/test_strncat_dynamic_write.c
+++ b/tests/test_strncat_dynamic_write.c
@@ -7,9 +7,11 @@ int main(int argc, char** argv) {
7 strncat(buffer, "1234567", 5); 7 strncat(buffer, "1234567", 5);
8 puts(buffer); 8 puts(buffer);
9 9
10#if 0
10 CHK_FAIL_START 11 CHK_FAIL_START
11 strncat(buffer, argv[1], argc); 12 strncat(buffer, argv[1], argc);
12 CHK_FAIL_END 13 CHK_FAIL_END
14#endif
13 15
14 puts(buffer); 16 puts(buffer);
15 return ret; 17 return ret;
diff --git a/tests/test_strncat_static_write.c b/tests/test_strncat_static_write.c
index 9332adc..7fe89ff 100644
--- a/tests/test_strncat_static_write.c
+++ b/tests/test_strncat_static_write.c
@@ -4,12 +4,15 @@
4 4
5int main(int argc, char** argv) { 5int main(int argc, char** argv) {
6 char buffer[8] = {0}; 6 char buffer[8] = {0};
7 strncat(buffer, "1234567", 5); 7 char src[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
8 strncat(buffer, src, 5);
8 puts(buffer); 9 puts(buffer);
9 10
11#if 0
10 CHK_FAIL_START 12 CHK_FAIL_START
11 strncat(buffer, "1234567890", 10); 13 strncat(buffer, src, 10);
12 CHK_FAIL_END 14 CHK_FAIL_END
15#endif
13 16
14 puts(buffer); 17 puts(buffer);
15 return ret; 18 return ret;