strncpy: implement _FORTIFY_SOURCE=2
Add support for fortify source level 2 to strncpy. This will enable detection of more areas where strncpy is used inappropriately. For example, this would have detected bug 8727221. Move the fortify_source tests out of string_test.cpp, and put it into fortify1_test.cpp. Create a new fortify2_test.cpp file, which copies all the tests in fortify1_test.cpp, and adds fortify_source level 2 specific tests. Change-Id: Ica0fba531cc7d0609e4f23b8176739b13f7f7a83
This commit is contained in:
@@ -119,9 +119,16 @@ char *strcpy(char *dest, const char *src) {
|
||||
return __builtin___strcpy_chk(dest, src, __builtin_object_size (dest, 0));
|
||||
}
|
||||
|
||||
extern void __strncpy_error()
|
||||
__attribute__((__error__("strncpy called with size bigger than buffer")));
|
||||
|
||||
__BIONIC_FORTIFY_INLINE
|
||||
char *strncpy(char *dest, const char *src, size_t n) {
|
||||
return __builtin___strncpy_chk(dest, src, n, __builtin_object_size (dest, 0));
|
||||
size_t bos = __bos(dest);
|
||||
if (__builtin_constant_p(n) && (n > bos)) {
|
||||
__strncpy_error();
|
||||
}
|
||||
return __builtin___strncpy_chk(dest, src, n, bos);
|
||||
}
|
||||
|
||||
__BIONIC_FORTIFY_INLINE
|
||||
|
Reference in New Issue
Block a user