void * calloc(size_t nmemb, size_t size) { if ( !callocp ) return calloc1(nmemb, size); if ( no_hook ) { return (*callocp)(nmemb, size); } else { void *ptr; int cctx; FILE *fd; no_hook = TRUE; cctx = DL_calling_context(DL_context_depth); ptr = (*callocp)(nmemb, size); if ( (fd=DL_get_logfd()) ) { fprintf(fd, "calloc(%d,%ld,%ld,%p).\n", cctx, (long)nmemb, (long)size, ptr); DL_release_logfd(); } no_hook = FALSE; return ptr; } }
void test (void) { char *p; p = malloc0 (6); strcpy (p, "Hello"); p = malloc1 (6); strcpy (p, "Hello"); strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ p = malloc2 (__INT_MAX__ >= 1700000 ? 424242 : __INT_MAX__ / 4, 6); strcpy (p, "World"); strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ p = calloc1 (2, 5); strcpy (p, "World"); strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ p = calloc2 (2, __INT_MAX__ >= 1700000 ? 424242 : __INT_MAX__ / 4, 5); strcpy (p, "World"); strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ }