File: holey_buffer_too_small.c

package info (click to toggle)
valgrind 1%3A3.12.0~svn20160714-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 120,428 kB
  • ctags: 70,855
  • sloc: ansic: 674,645; exp: 26,134; xml: 21,574; asm: 7,570; cpp: 7,567; makefile: 7,380; sh: 6,188; perl: 5,855; haskell: 195
file content (43 lines) | stat: -rw-r--r-- 1,314 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

#include <stdlib.h>
#include <stdio.h>

#include "../memcheck.h"

/* This test checks that VALGRIND_CHECK_MEM_IS_DEFINED correctly
   reports two errors when presented with a buffer which contains both
   undefined data and some out of range component(s), and the
   undefined data appears before the out of range components.  Should
   report 5 errors in total: the first test should report 2, the rest
   1 each. */

int main ( void )
{
   char* a;

   fprintf(stderr, "\n---- part defined, address error at end ----\n\n");
   a = malloc(8);
   a[0] = a[1] = a[2] = a[3] = a[6] = a[7] = 'x';
   (void) VALGRIND_CHECK_MEM_IS_DEFINED(a, 9);
   free(a);

   fprintf(stderr, "\n---- part defined, address error at start ----\n\n");
   a = malloc(8);
   a[0] = a[1] = a[2] = a[3] = a[6] = a[7] = 'x';
   (void) VALGRIND_CHECK_MEM_IS_DEFINED(a-1, 9);
   free(a);

   fprintf(stderr, "\n---- fully defined, address error at end ----\n\n");
   a = malloc(8);
   a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 'x';
   (void) VALGRIND_CHECK_MEM_IS_DEFINED(a, 9);
   free(a);

   fprintf(stderr, "\n---- fully defined, address error at start ----\n\n");
   a = malloc(8);
   a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 'x';
   (void) VALGRIND_CHECK_MEM_IS_DEFINED(a-1, 9);
   free(a);

   return 0;
}