aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2011-12-16 18:28:50 +0000
committerAnna Zaks <ganna@apple.com>2011-12-16 18:28:50 +0000
commitd3d8548e75f3fb6db53ed0927c1df30d78f4ce1d (patch)
tree75726ad7899c12c78864dcae3018af68407f2e77 /test
parent0e818a412f337baa35d1d7677c64259610df0c2e (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.c36
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}}
+}