diff options
Diffstat (limited to 'test/Analysis/taint-tester.c')
-rw-r--r-- | test/Analysis/taint-tester.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/test/Analysis/taint-tester.c b/test/Analysis/taint-tester.c index 476027f31b..8c964e4ae2 100644 --- a/test/Analysis/taint-tester.c +++ b/test/Analysis/taint-tester.c @@ -111,10 +111,6 @@ int fscanfTest(void) { fprintf(fp, "%s %d", s, t); // expected-warning + {{tainted}} fclose(fp); // expected-warning + {{tainted}} - // Check if we propagate taint from stdin when it's used in an assignment. - FILE *pfstd = stdin; - fscanf(pfstd, "%s %d", s, &t); // TODO: This should be tainted as well. - // Test fscanf and fopen. if((fp=fopen("test","r")) == 0) // expected-warning + {{tainted}} return 1; @@ -122,3 +118,35 @@ int fscanfTest(void) { fprintf(stdout, "%s %d", s, t); // expected-warning + {{tainted}} return 0; } + +// Check if we propagate taint from stdin when it's used in an assignment. +void stdinTest1() { + int i; + fscanf(stdin, "%d", &i); + int j = i; // expected-warning + {{tainted}} +} +void stdinTest2(FILE *pIn) { + FILE *p = stdin; + FILE *pp = p; + int ii; + + fscanf(pp, "%d", &ii); + int jj = ii;// expected-warning + {{tainted}} + + fscanf(p, "%d", &ii); + int jj2 = ii;// expected-warning + {{tainted}} + + ii = 3; + int jj3 = ii;// no warning + + p = pIn; + fscanf(p, "%d", &ii); + int jj4 = ii;// no warning +} + +void stdinTest3() { + FILE **ppp = &stdin; + int iii; + fscanf(*ppp, "%d", &iii); + int jjj = iii;// expected-warning + {{tainted}} +} |