holey_buffer_too_small.c revision 8f943afc22a6a683b78271836c8ddc462b4824a9
1
2#include <stdlib.h>
3#include <stdio.h>
4
5#include "../memcheck.h"
6
7/* This test checks that VALGRIND_CHECK_MEM_IS_DEFINED correctly
8   reports two errors when presented with a buffer which contains both
9   undefined data and some out of range component(s), and the
10   undefined data appears before the out of range components.  Should
11   report 5 errors in total: the first test should report 2, the rest
12   1 each. */
13
14int main ( void )
15{
16   char* a;
17
18   fprintf(stderr, "\n---- part defined, address error at end ----\n\n");
19   a = malloc(8);
20   a[0] = a[1] = a[2] = a[3] = a[6] = a[7] = 'x';
21   VALGRIND_CHECK_MEM_IS_DEFINED(a, 9);
22   free(a);
23
24   fprintf(stderr, "\n---- part defined, address error at start ----\n\n");
25   a = malloc(8);
26   a[0] = a[1] = a[2] = a[3] = a[6] = a[7] = 'x';
27   VALGRIND_CHECK_MEM_IS_DEFINED(a-1, 9);
28   free(a);
29
30   fprintf(stderr, "\n---- fully defined, address error at end ----\n\n");
31   a = malloc(8);
32   a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 'x';
33   VALGRIND_CHECK_MEM_IS_DEFINED(a, 9);
34   free(a);
35
36   fprintf(stderr, "\n---- fully defined, address error at start ----\n\n");
37   a = malloc(8);
38   a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 'x';
39   VALGRIND_CHECK_MEM_IS_DEFINED(a-1, 9);
40   free(a);
41
42   return 0;
43}
44