This library provides an implementation of the bounds-checking C functions (as specified in Annex K of the current C standard, a.k.a. C11) for use with the GNU C library.
These functions lower the risk of introducing security vulnerabilities such as buffer overflows and format string vulnerabilities into your code by providing clear and easy-to-use interfaces. For each C function a secure alternate function ending in a _s postfix is provided (e.g., strcpy_s). Use of these functions is recommended by security experts and secure coding standards (CERT Secure Coding Standard C).
This library consists of:
- a thread-safe implementation of all functions specified in the ISO Standard (except widechar functions)
- API documentation for all functions
- test cases for all functions
- overloaded C++ template functions for easier use when compiling with
g++
- Compile the slibc libary by typing
make. Slibc is compiled as a shared library (libslibc.so). To link with the shared library, add-lslibcto your linker step. - Optionally run all tests by executing make test.
- Use the new
_sfunctions in your code:
#include <string.h>
int main(int argc, char *argv[])
{
char dest[10];
strcpy_s(dest, sizeof(dest), argv[0]);
}- When compiling include the SLIBC header directory (
include/slibc) in your compiler's include path (e.g.,add -I~/slibc/include/slibc). Remember that Annex K adds functions to the standard C library by extending existing header files. SLIBC makes the fact that it's a third-party library (instead of being part of GLIBC) as transparent as possible to your program. To usestrcpy_s, simply includestring.hin your program. It is important that your compiler searches in the slibc header directory first. - Link your program to Slibc. Slibc is built as a shared library. Add
-lslibcto your linking step. Additionally, you might have to add the location of slibc's so-files to your Linker search path by adding -L (e.g.,-L../src/). - Run your program. If the Slibc shared object file cannot be found, you have to adjust the environment variable
LD_LIBRARY_PATH.
include/slibc: contains the public header filessrc/: contains the implementationtests_slibc/: contains our c++ based test-suite for slibctests_ow/: contains the open watcom tests.