C CheckPointer Subobject Access Example
Here is some sample code that performs an out of bounds access in an array within a struct.
#include <stdio.h>
struct abc
{
char a[8];
char b[8];
};
int main()
{
int index;
struct abc test;
/* out of bounds on a[] */
sprintf(test.a, "Too long"); /* note: copies 9 characters "into" test.a */
/* another out of bounds access */
printf("\nResult=%s\n\n", test.a);
return 0;
}
CheckPointer detects sub-object out-of-bounds accesses. It also uses a special wrapper for sprintf (and other C runtime library functions) that allows it to detect the kind of error depicted by this example regardless of whether the program declares a global or local variable for the struct abc or allocates it on the heap.
In particular, for the given code fragment, CheckPointer reports:
*** Error: Dereference of pointer is out of bounds.
in wrapper function: sprintf
called in function: main, line: 13, file: example.c
If you configure CheckPointer to not stop after the first error (with an assertion failure), it will continue program execution and provide additional error messages. In particular it reports:
*** Error: Dereference of pointer is out of bounds.
in wrapper function: printf
called in function: main, line: 15, file: example.c
See a larger CheckPointer example that pinpoints a mysterious crash.
Semantic Designs also provides a variety of other tools.
