diff options
author | Anna Zaks <ganna@apple.com> | 2011-12-16 18:28:50 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2011-12-16 18:28:50 +0000 |
commit | d3d8548e75f3fb6db53ed0927c1df30d78f4ce1d (patch) | |
tree | 75726ad7899c12c78864dcae3018af68407f2e77 /test | |
parent | 0e818a412f337baa35d1d7677c64259610df0c2e (diff) |
[analyzer] Better stdin support.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146748 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-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}} +} |