Skip to content

Commit f8d0a0d

Browse files
committed
Rust: Expand the Wrapping test some more.
1 parent 1d461ff commit f8d0a0d

File tree

3 files changed

+98
-30
lines changed

3 files changed

+98
-30
lines changed

rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,25 @@
4747
| main.rs:173:5:173:5 | [post] a [implicit borrow] | main.rs:173:5:173:5 | [post] a |
4848
| main.rs:174:5:174:5 | [post] a [implicit borrow] | main.rs:174:5:174:5 | [post] a |
4949
| main.rs:175:5:175:5 | [post] a [implicit borrow] | main.rs:175:5:175:5 | [post] a |
50-
| main.rs:191:24:191:24 | s | main.rs:191:18:191:24 | FormatArgsExpr |
51-
| main.rs:196:9:196:9 | [post] a [implicit borrow] | main.rs:196:9:196:9 | [post] a |
52-
| main.rs:197:9:197:9 | [post] a [implicit borrow] | main.rs:197:9:197:9 | [post] a |
53-
| main.rs:198:9:198:9 | [post] a [implicit borrow] | main.rs:198:9:198:9 | [SSA] a |
54-
| main.rs:199:9:199:9 | [post] a [implicit borrow] | main.rs:199:9:199:9 | [SSA] a |
50+
| main.rs:191:9:191:9 | i | main.rs:191:9:191:18 | i as usize |
51+
| main.rs:195:24:195:24 | s | main.rs:195:18:195:24 | FormatArgsExpr |
5552
| main.rs:201:21:201:21 | a | main.rs:201:21:201:23 | a.0 |
53+
| main.rs:203:9:203:9 | [post] a [implicit borrow] | main.rs:203:9:203:9 | [post] a |
54+
| main.rs:204:9:204:9 | [post] a [implicit borrow] | main.rs:204:9:204:9 | [post] a |
55+
| main.rs:206:21:206:21 | a | main.rs:206:21:206:23 | a.0 |
56+
| main.rs:209:9:209:9 | [post] a [implicit borrow] | main.rs:209:9:209:9 | [SSA] a |
57+
| main.rs:210:9:210:9 | [post] a [implicit borrow] | main.rs:210:9:210:9 | [SSA] a |
58+
| main.rs:212:21:212:21 | a | main.rs:212:21:212:23 | a.0 |
59+
| main.rs:215:9:215:9 | [post] a [implicit borrow] | main.rs:215:9:215:9 | [SSA] a |
60+
| main.rs:216:9:216:9 | [post] a [implicit borrow] | main.rs:216:9:216:9 | [SSA] a |
61+
| main.rs:218:21:218:21 | a | main.rs:218:21:218:23 | a.0 |
62+
| main.rs:221:9:221:9 | [post] a [implicit borrow] | main.rs:221:9:221:9 | [SSA] a |
63+
| main.rs:223:21:223:21 | a | main.rs:223:21:223:23 | a.0 |
64+
| main.rs:228:21:228:22 | v1 | main.rs:228:21:228:24 | v1.0 |
65+
| main.rs:230:21:230:22 | v2 | main.rs:230:21:230:24 | v2.0 |
66+
| main.rs:232:21:232:22 | v3 | main.rs:232:21:232:24 | v3.0 |
67+
| main.rs:234:21:234:22 | v4 | main.rs:234:21:234:24 | v4.0 |
68+
| main.rs:236:21:236:22 | v5 | main.rs:236:21:236:24 | v5.0 |
69+
| main.rs:238:21:238:22 | v6 | main.rs:238:21:238:24 | v6.0 |
70+
| main.rs:240:21:240:22 | v7 | main.rs:240:21:240:24 | v7.0 |
71+
| main.rs:242:21:242:22 | v8 | main.rs:242:21:242:24 | v8.0 |

rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,16 +132,20 @@ edges
132132
| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:19 |
133133
| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:9 |
134134
| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:20 |
135-
| main.rs:196:9:196:9 | [post] a | main.rs:197:9:197:9 | a | provenance | |
136-
| main.rs:196:9:196:9 | [post] a | main.rs:198:9:198:9 | a | provenance | |
137-
| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:3 |
138-
| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:4 |
139-
| main.rs:197:9:197:9 | [post] a | main.rs:198:9:198:9 | a | provenance | |
140-
| main.rs:197:9:197:9 | a | main.rs:197:9:197:9 | [post] a | provenance | MaD:4 |
141-
| main.rs:198:9:198:9 | a | main.rs:199:9:199:9 | a | provenance | MaD:4 |
142-
| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:3 |
143-
| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:4 |
144-
| main.rs:199:9:199:9 | a | main.rs:200:14:200:14 | a | provenance | MaD:4 |
135+
| main.rs:203:9:203:9 | [post] a | main.rs:204:9:204:9 | a | provenance | |
136+
| main.rs:203:9:203:9 | [post] a | main.rs:205:14:205:14 | a | provenance | |
137+
| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:3 |
138+
| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 |
139+
| main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | |
140+
| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:4 |
141+
| main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | |
142+
| main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | |
143+
| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:4 |
144+
| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:3 |
145+
| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 |
146+
| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:4 |
147+
| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:23 |
148+
| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:24 |
145149
nodes
146150
| main.rs:12:9:12:9 | a | semmle.label | a |
147151
| main.rs:12:13:12:22 | source(...) | semmle.label | source(...) |
@@ -266,14 +270,19 @@ nodes
266270
| main.rs:178:10:178:24 | ... .neg() | semmle.label | ... .neg() |
267271
| main.rs:179:10:179:18 | source(...) | semmle.label | source(...) |
268272
| main.rs:179:10:179:24 | ... .not() | semmle.label | ... .not() |
269-
| main.rs:196:9:196:9 | [post] a | semmle.label | [post] a |
270-
| main.rs:196:22:196:30 | source(...) | semmle.label | source(...) |
271-
| main.rs:197:9:197:9 | [post] a | semmle.label | [post] a |
272-
| main.rs:197:9:197:9 | a | semmle.label | a |
273-
| main.rs:198:9:198:9 | a | semmle.label | a |
274-
| main.rs:198:14:198:22 | source(...) | semmle.label | source(...) |
275-
| main.rs:199:9:199:9 | a | semmle.label | a |
276-
| main.rs:200:14:200:14 | a | semmle.label | a |
273+
| main.rs:203:9:203:9 | [post] a | semmle.label | [post] a |
274+
| main.rs:203:22:203:30 | source(...) | semmle.label | source(...) |
275+
| main.rs:204:9:204:9 | [post] a | semmle.label | [post] a |
276+
| main.rs:204:9:204:9 | a | semmle.label | a |
277+
| main.rs:205:14:205:14 | a | semmle.label | a |
278+
| main.rs:208:9:208:9 | a | semmle.label | a |
279+
| main.rs:208:13:208:21 | source(...) | semmle.label | source(...) |
280+
| main.rs:209:9:209:9 | a | semmle.label | a |
281+
| main.rs:209:14:209:22 | source(...) | semmle.label | source(...) |
282+
| main.rs:210:9:210:9 | a | semmle.label | a |
283+
| main.rs:211:14:211:14 | a | semmle.label | a |
284+
| main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) |
285+
| main.rs:222:14:222:14 | a | semmle.label | a |
277286
subpaths
278287
testFailures
279288
#select
@@ -325,5 +334,7 @@ testFailures
325334
| main.rs:176:10:176:10 | a | main.rs:175:21:175:29 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:175:21:175:29 | source(...) | source(...) |
326335
| main.rs:178:10:178:24 | ... .neg() | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | $@ | main.rs:178:10:178:18 | source(...) | source(...) |
327336
| main.rs:179:10:179:24 | ... .not() | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | $@ | main.rs:179:10:179:18 | source(...) | source(...) |
328-
| main.rs:200:14:200:14 | a | main.rs:196:22:196:30 | source(...) | main.rs:200:14:200:14 | a | $@ | main.rs:196:22:196:30 | source(...) | source(...) |
329-
| main.rs:200:14:200:14 | a | main.rs:198:14:198:22 | source(...) | main.rs:200:14:200:14 | a | $@ | main.rs:198:14:198:22 | source(...) | source(...) |
337+
| main.rs:205:14:205:14 | a | main.rs:203:22:203:30 | source(...) | main.rs:205:14:205:14 | a | $@ | main.rs:203:22:203:30 | source(...) | source(...) |
338+
| main.rs:211:14:211:14 | a | main.rs:208:13:208:21 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:208:13:208:21 | source(...) | source(...) |
339+
| main.rs:211:14:211:14 | a | main.rs:209:14:209:22 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:209:14:209:22 | source(...) | source(...) |
340+
| main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) |

rust/ql/test/library-tests/dataflow/taint/main.rs

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,24 +181,65 @@ fn std_ops() {
181181

182182
mod wrapping {
183183
use std::num::Wrapping;
184-
use std::ops::AddAssign;
184+
use std::ops::{Add, AddAssign, Neg, Not};
185185

186186
fn source(i: i64) -> Wrapping<i64> {
187187
Wrapping(i)
188188
}
189189

190+
fn source_usize(i: i64) -> usize {
191+
i as usize
192+
}
193+
190194
fn sink(s: Wrapping<i64>) {
191195
println!("{}", s);
192196
}
193197

194198
pub fn wrapping() {
195199
let mut a: Wrapping<i64> = Wrapping(crate::source(1));
200+
sink(a); // $ MISSING: hasTaintFlow=1
201+
crate::sink(a.0); // $ MISSING: hasTaintFlow=1
202+
196203
a.add_assign(source(2));
197204
a.add_assign(Wrapping(crate::source(3)));
198-
a += source(4);
199-
a += std::num::Wrapping(crate::source(5));
200-
sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=1 hasTaintFlow=3 hasTaintFlow=5
201-
crate::sink(a.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 hasTaintFlow=3 hasTaintFlow=4 hasTaintFlow=5
205+
sink(a); // $ hasTaintFlow=2 MISSING: hasTaintFlow=1 hasTaintFlow=3
206+
crate::sink(a.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 hasTaintFlow=3
207+
208+
a = source(4);
209+
a += source(5);
210+
a += std::num::Wrapping(crate::source(6));
211+
sink(a); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6
212+
crate::sink(a.0); // $ MISSING: hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6
213+
214+
a = source(7);
215+
a &= source(8);
216+
a &= Wrapping(crate::source(9));
217+
sink(a); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9
218+
crate::sink(a.0); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9
219+
220+
a = source(10);
221+
a <<= source_usize(11);
222+
sink(a); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10
223+
crate::sink(a.0); // $ MISSING: hasTaintFlow=10 hasTaintFlow=11
224+
225+
let b: Wrapping<i64> = Wrapping(crate::source(1));
226+
let c: Wrapping<i64> = Wrapping(crate::source(2));
227+
let v1 = b + c;
228+
crate::sink(v1.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2
229+
let v2 = b.add(c);
230+
crate::sink(v2.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2
231+
let v3 = -b;
232+
crate::sink(v3.0); // $ MISSING: hasTaintFlow=1
233+
let v4 = b.neg();
234+
crate::sink(v4.0); // $ MISSING: hasTaintFlow=1
235+
let v5 = !b;
236+
crate::sink(v5.0); // $ MISSING: hasTaintFlow=1
237+
let v6 = b.not();
238+
crate::sink(v6.0); // $ MISSING: hasTaintFlow=1
239+
let v7 = b & c;
240+
crate::sink(v7.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2
241+
let v8 = b << source_usize(3);
242+
crate::sink(v8.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=3
202243
}
203244
}
204245

0 commit comments

Comments
 (0)