int
sprintf(
char *str
, const char *fmt
, ...
)
int
vsprintf(
char *str
, const char *fmt
, va_list ap
)
int
snprintf(
char *str
, size_t len
, const char *fmt
, ...
)
int
vsnprintf(
char *str
, size_t len
, const char *fmt
, va_list ap
)
char
*
gets(
char *str
)
char
*
fgets(
char *str
, int len
, FILE *fp
)
void
*
memcpy(
void *str
, const void *ptr
, size_t len
)
void
*
memmove(
void *str
, const void *ptr
, size_t len
)
void
*
memset(
void *str
, int val
, size_t len
)
char
*
strcpy(
char *str
, const char *ptr
, size_t len
)
char
*
strcat(
char *str
, const char *ptr
, size_t len
)
char
*
strncpy(
char *str
, const char *ptr
, size_t len
)
char
*
strncat(
char *str
, const char *ptr
, size_t len
)
void
*
bcopy(
const void *ptr
, void *str
, size_t len
)
void
*
bzero(
void *str
, size_t len
)
ssize_t
read(
int fd
, void *str
, size_t len
)
int
readlink(
const char * restrict path
, char * restrict str
, size_t len
)
int
getcwd(
char *str
, size_t len
)
_FORTIFY_SOURCE
bounds checking is enabled as described below, the above functions get
overwritten to use the
gcc(1)
__builtin_object_size(3)
function to compute the size of
str
if known at compile time and perform bounds check on it in order
to avoid data buffer or stack buffer overflows.
If an overflow is detected the routines will call
abort(3).
To enable these function overrides the following should be added to the gcc(1) command line: ``-I/usr/include/ssp'' to override the standard include files and ``-D_FORTIFY_SOURCE=1'' or ``-D_FORTIFY_SOURCE=2''.
If
_FORTIFY_SOURCE
is
set
to
1
the code will compute the maximum possible buffer size for
str
,
and if set to
2
it will compute the minimum buffer size.