/* A simple test to demonstrate heap, stack, and global overrun detection. */ #include <stdio.h> #include <stdlib.h> short ga[100]; __attribute__((noinline)) int addup_wrongly ( short* arr ) { int sum = 0, i; for (i = 0; i <= 100; i++) sum += (int)arr[i]; return sum; } __attribute__((noinline)) int do_other_stuff ( void ) { short la[100]; return 123 + addup_wrongly(la); } __attribute__((noinline)) int do_stupid_malloc_stuff ( void ) { int sum = 0; unsigned char* duh = malloc(100 * sizeof(char)); sum += duh[-1]; free(duh); sum += duh[50]; return sum; } int main ( void ) { long s = addup_wrongly(ga); s += do_other_stuff(); s += do_stupid_malloc_stuff(); if (s == 123456789) { fprintf(stdout, "well, i never!\n"); } else { fprintf(stdout, "boringly as expected\n"); } return 0; }