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 */ }