The standard C library's string handling functions are a rich source of potential errors, since they do very little checking on the bounds of the objects being manipulated.
Insure++ detects problems such as overwriting the end of a buffer as described in Memory Corruption. Another common problem is caused by trying to work with strings that are not null-terminated, as in the following example:
/* * File: readovr2.c */ main() { char junk; char b[8], c[8]; strncpy(b, "This is a test", sizeof(b)); memset(c, 0, sizeof(c)); printf("%s\n", b); return (0); }
This program attempts to copy the string This is a test
into a buffer that is only eight characters long. Although it uses strncpy
to avoid overwriting its buffer, the resulting copy doesn’t have a NULL
on the end. Insure++ detects this problem in line 10 when the call to printf
tries to print the string.