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