1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_tool_basics.h" 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main(void) 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // The n*size multiplication overflows in this example. The only sensible 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // thing to do is return NULL, but old versions of Valgrind didn't (they 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // often ground to a halt trying to allocate an enormous (but not as 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // enormous as asked-for!) block. See bug 149878. 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int* x; 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if VG_WORDSIZE == 8 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown size_t szB = 0x1000000010000001ULL; 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown size_t szB = 0x10000001UL; 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown x = calloc(szB, 0x10); 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "x = %#lx\n", (long)x); 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 21