Esempio n. 1
0
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" } */
}