char *taintme (char *s)
     /*@ensures result:taintedness = s:taintedness@*/
{
  char *res = (char *) malloc (sizeof (*res) * strlen (s));
  assert (res != NULL);
  strcpy (res, s);
  return res;
}

void safecall (/*@untainted@*/ char *s)
{
  (void) system (taintme (s)); /* okay */
}

void dangerouscall (/*@tainted@*/ char *s)
{
  (void) system (taintme (s)); /* error */
}


syntax highlighted by Code2HTML, v. 0.9.1