${LCLINT} -mts tainted tainted5.c -mustfree -exportlocal
${LCLINT} -mts tainted taintedmerge.c -mustfree -exportlocal -expect 3
${LCLINT} -mts tainted taintedimplicit.c -mustfree -exportlocal -expect 1
+ ${LCLINT} -mts tainted sprintf.c -expect 2
--- /dev/null
+char *sp (/*@untainted@*/ char *s1, /*@untainted@*/ char *s2, /*@tainted@*/ char *s3)
+{
+ char *s;
+ s = (char *) malloc (sizeof (*s) * 100);
+ assert (s != NULL);
+
+ sprintf (s, "%s %d %s %d", s1, 3, s2, 3);
+ (void) system (s); /* okay */
+
+ sprintf (s, "%s %d %s %d", s1, 3, s3, 3);
+ (void) system (s); /* error */
+
+ sprintf (s, "%s %d %s %d %s %s %s", s1, 3, s2, 3, s2, s3, s2);
+ (void) system (s); /* error */
+
+ return s; /* error */
+}
+
extern FILE *fopen (/*@untainted@*/ char *filename, char *mode) ;
+extern int sprintf (/*@out@*/ char *s, /*@untainted@*/ char *format, ...)
+ /*@ensures s:taintedness = ...:taintedness@*/ ;
+
extern int printf (/*@untainted@*/ char *format, ...) ;
extern /*@null@*/ FILE *freopen (/*@untainted@*/ char *filename, char *mode, FILE *stream) ;