Skip to content

Commit a11ca06

Browse files
committed
C++: Implement more std::string models.
1 parent 9204940 commit a11ca06

File tree

5 files changed

+169
-21
lines changed

5 files changed

+169
-21
lines changed

cpp/ql/src/semmle/code/cpp/models/implementations/StdString.qll

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ class StdBasicString extends TemplateClass {
88
}
99

1010
/**
11-
* The standard function `std::string.c_str`.
11+
* The `std::string` functions `c_str` and `data`.
1212
*/
1313
class StdStringCStr extends TaintFunction {
14-
StdStringCStr() { this.hasQualifiedName("std", "basic_string", "c_str") }
14+
StdStringCStr() {
15+
this.hasQualifiedName("std", "basic_string", "c_str") or
16+
this.hasQualifiedName("std", "basic_string", "data")
17+
}
1518

1619
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
1720
// flow from string itself (qualifier) to return value
@@ -40,12 +43,44 @@ class StdStringPlus extends TaintFunction {
4043
}
4144

4245
/**
43-
* The `std::string` functions `operator+=` and `append`.
46+
* The `std::string` functions `operator+=`, `append`, `insert` and
47+
* `replace`. All of these functions combine the existing string
48+
* with a new string (or character) from one of the arguments.
4449
*/
4550
class StdStringAppend extends TaintFunction {
4651
StdStringAppend() {
4752
this.hasQualifiedName("std", "basic_string", "operator+=") or
48-
this.hasQualifiedName("std", "basic_string", "append")
53+
this.hasQualifiedName("std", "basic_string", "append") or
54+
this.hasQualifiedName("std", "basic_string", "insert") or
55+
this.hasQualifiedName("std", "basic_string", "replace")
56+
}
57+
58+
/**
59+
* Gets the index of a parameter to this function that is a string (or
60+
* character).
61+
*/
62+
int getAStringParameter() {
63+
getParameter(result).getType() instanceof PointerType or
64+
getParameter(result).getType() instanceof ReferenceType or
65+
getParameter(result).getType() = getDeclaringType().getTemplateArgument(0) // i.e. `std::basic_string::CharT`
66+
}
67+
68+
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
69+
// flow from parameter to string itself (qualifier) and return value
70+
input.isParameterDeref(getAStringParameter()) and
71+
(
72+
output.isQualifierObject() or
73+
output.isReturnValueDeref()
74+
)
75+
}
76+
}
77+
78+
/**
79+
* The standard function `std::string.assign`.
80+
*/
81+
class StdStringAssign extends TaintFunction {
82+
StdStringAssign() {
83+
this.hasQualifiedName("std", "basic_string", "assign")
4984
}
5085

5186
/**
@@ -67,3 +102,48 @@ class StdStringAppend extends TaintFunction {
67102
)
68103
}
69104
}
105+
106+
/**
107+
* The standard function `std::string.copy`.
108+
*/
109+
class StdStringCopy extends TaintFunction {
110+
StdStringCopy() {
111+
this.hasQualifiedName("std", "basic_string", "copy")
112+
}
113+
114+
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
115+
// copy(dest, num, pos)
116+
input.isQualifierObject() and
117+
output.isParameterDeref(0)
118+
}
119+
}
120+
121+
/**
122+
* The standard function `std::string.substr`.
123+
*/
124+
class StdStringSubstr extends TaintFunction {
125+
StdStringSubstr() {
126+
this.hasQualifiedName("std", "basic_string", "substr")
127+
}
128+
129+
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
130+
// substr(pos, num)
131+
input.isQualifierObject() and
132+
output.isReturnValue()
133+
}
134+
}
135+
136+
/**
137+
* The standard function `std::string.swap`.
138+
*/
139+
class StdStringSwap extends TaintFunction {
140+
StdStringSwap() { this.hasQualifiedName("std", "basic_string", "swap") }
141+
142+
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
143+
input.isQualifierObject() and
144+
output.isParameterDeref(0)
145+
or
146+
input.isParameterDeref(0) and
147+
output.isQualifierObject()
148+
}
149+
}

cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,9 +510,17 @@
510510
| string.cpp:193:17:193:25 | call to basic_string | string.cpp:204:7:204:8 | s6 | |
511511
| string.cpp:193:17:193:25 | call to basic_string | string.cpp:205:7:205:8 | s6 | |
512512
| string.cpp:195:7:195:8 | ref arg s3 | string.cpp:196:7:196:8 | s3 | |
513+
| string.cpp:195:17:195:18 | s1 | string.cpp:195:7:195:8 | ref arg s3 | TAINT |
514+
| string.cpp:195:17:195:18 | s1 | string.cpp:195:10:195:15 | call to assign | TAINT |
513515
| string.cpp:198:7:198:8 | ref arg s4 | string.cpp:199:7:199:8 | s4 | |
516+
| string.cpp:198:17:198:18 | s2 | string.cpp:198:7:198:8 | ref arg s4 | TAINT |
517+
| string.cpp:198:17:198:18 | s2 | string.cpp:198:10:198:15 | call to assign | TAINT |
514518
| string.cpp:201:7:201:8 | ref arg s5 | string.cpp:202:7:202:8 | s5 | |
519+
| string.cpp:201:21:201:21 | c | string.cpp:201:7:201:8 | ref arg s5 | TAINT |
520+
| string.cpp:201:21:201:21 | c | string.cpp:201:10:201:15 | call to assign | TAINT |
515521
| string.cpp:204:7:204:8 | ref arg s6 | string.cpp:205:7:205:8 | s6 | |
522+
| string.cpp:204:17:204:18 | s1 | string.cpp:204:7:204:8 | ref arg s6 | TAINT |
523+
| string.cpp:204:17:204:18 | s1 | string.cpp:204:10:204:15 | call to assign | TAINT |
516524
| string.cpp:209:17:209:23 | hello | string.cpp:209:17:209:24 | call to basic_string | TAINT |
517525
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:214:7:214:8 | s1 | |
518526
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:215:20:215:21 | s1 | |
@@ -527,18 +535,26 @@
527535
| string.cpp:214:7:214:8 | s1 | string.cpp:215:7:215:8 | s3 | |
528536
| string.cpp:214:7:214:8 | s1 | string.cpp:216:7:216:8 | s3 | |
529537
| string.cpp:215:7:215:8 | ref arg s3 | string.cpp:216:7:216:8 | s3 | |
538+
| string.cpp:215:20:215:21 | s1 | string.cpp:215:7:215:8 | ref arg s3 | TAINT |
539+
| string.cpp:215:20:215:21 | s1 | string.cpp:215:10:215:15 | call to insert | TAINT |
530540
| string.cpp:218:7:218:8 | s2 | string.cpp:218:2:218:8 | ... = ... | |
531541
| string.cpp:218:7:218:8 | s2 | string.cpp:219:7:219:8 | s4 | |
532542
| string.cpp:218:7:218:8 | s2 | string.cpp:220:7:220:8 | s4 | |
533543
| string.cpp:219:7:219:8 | ref arg s4 | string.cpp:220:7:220:8 | s4 | |
544+
| string.cpp:219:20:219:21 | s1 | string.cpp:219:7:219:8 | ref arg s4 | TAINT |
545+
| string.cpp:219:20:219:21 | s1 | string.cpp:219:10:219:15 | call to insert | TAINT |
534546
| string.cpp:222:7:222:8 | s1 | string.cpp:222:2:222:8 | ... = ... | |
535547
| string.cpp:222:7:222:8 | s1 | string.cpp:223:7:223:8 | s5 | |
536548
| string.cpp:222:7:222:8 | s1 | string.cpp:224:7:224:8 | s5 | |
537549
| string.cpp:223:7:223:8 | ref arg s5 | string.cpp:224:7:224:8 | s5 | |
550+
| string.cpp:223:20:223:21 | s2 | string.cpp:223:7:223:8 | ref arg s5 | TAINT |
551+
| string.cpp:223:20:223:21 | s2 | string.cpp:223:10:223:15 | call to insert | TAINT |
538552
| string.cpp:226:7:226:8 | s1 | string.cpp:226:2:226:8 | ... = ... | |
539553
| string.cpp:226:7:226:8 | s1 | string.cpp:227:7:227:8 | s6 | |
540554
| string.cpp:226:7:226:8 | s1 | string.cpp:228:7:228:8 | s6 | |
541555
| string.cpp:227:7:227:8 | ref arg s6 | string.cpp:228:7:228:8 | s6 | |
556+
| string.cpp:227:24:227:24 | c | string.cpp:227:7:227:8 | ref arg s6 | TAINT |
557+
| string.cpp:227:24:227:24 | c | string.cpp:227:10:227:15 | call to insert | TAINT |
542558
| string.cpp:232:17:232:23 | hello | string.cpp:232:17:232:24 | call to basic_string | TAINT |
543559
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:237:7:237:8 | s1 | |
544560
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:238:24:238:25 | s1 | |
@@ -553,18 +569,26 @@
553569
| string.cpp:237:7:237:8 | s1 | string.cpp:238:7:238:8 | s3 | |
554570
| string.cpp:237:7:237:8 | s1 | string.cpp:239:7:239:8 | s3 | |
555571
| string.cpp:238:7:238:8 | ref arg s3 | string.cpp:239:7:239:8 | s3 | |
572+
| string.cpp:238:24:238:25 | s1 | string.cpp:238:7:238:8 | ref arg s3 | TAINT |
573+
| string.cpp:238:24:238:25 | s1 | string.cpp:238:10:238:16 | call to replace | TAINT |
556574
| string.cpp:241:7:241:8 | s2 | string.cpp:241:2:241:8 | ... = ... | |
557575
| string.cpp:241:7:241:8 | s2 | string.cpp:242:7:242:8 | s4 | |
558576
| string.cpp:241:7:241:8 | s2 | string.cpp:243:7:243:8 | s4 | |
559577
| string.cpp:242:7:242:8 | ref arg s4 | string.cpp:243:7:243:8 | s4 | |
578+
| string.cpp:242:24:242:25 | s1 | string.cpp:242:7:242:8 | ref arg s4 | TAINT |
579+
| string.cpp:242:24:242:25 | s1 | string.cpp:242:10:242:16 | call to replace | TAINT |
560580
| string.cpp:245:7:245:8 | s1 | string.cpp:245:2:245:8 | ... = ... | |
561581
| string.cpp:245:7:245:8 | s1 | string.cpp:246:7:246:8 | s5 | |
562582
| string.cpp:245:7:245:8 | s1 | string.cpp:247:7:247:8 | s5 | |
563583
| string.cpp:246:7:246:8 | ref arg s5 | string.cpp:247:7:247:8 | s5 | |
584+
| string.cpp:246:24:246:25 | s2 | string.cpp:246:7:246:8 | ref arg s5 | TAINT |
585+
| string.cpp:246:24:246:25 | s2 | string.cpp:246:10:246:16 | call to replace | TAINT |
564586
| string.cpp:249:7:249:8 | s1 | string.cpp:249:2:249:8 | ... = ... | |
565587
| string.cpp:249:7:249:8 | s1 | string.cpp:250:7:250:8 | s6 | |
566588
| string.cpp:249:7:249:8 | s1 | string.cpp:251:7:251:8 | s6 | |
567589
| string.cpp:250:7:250:8 | ref arg s6 | string.cpp:251:7:251:8 | s6 | |
590+
| string.cpp:250:28:250:28 | c | string.cpp:250:7:250:8 | ref arg s6 | TAINT |
591+
| string.cpp:250:28:250:28 | c | string.cpp:250:10:250:16 | call to replace | TAINT |
568592
| string.cpp:255:17:255:20 | {...} | string.cpp:260:10:260:11 | b1 | |
569593
| string.cpp:255:17:255:20 | {...} | string.cpp:261:7:261:8 | b1 | |
570594
| string.cpp:255:19:255:19 | 0 | string.cpp:255:17:255:20 | {...} | TAINT |
@@ -577,7 +601,9 @@
577601
| string.cpp:257:17:257:24 | call to basic_string | string.cpp:263:14:263:15 | s1 | |
578602
| string.cpp:258:17:258:22 | call to source | string.cpp:258:17:258:25 | call to basic_string | TAINT |
579603
| string.cpp:258:17:258:25 | call to basic_string | string.cpp:263:2:263:3 | s2 | |
604+
| string.cpp:260:2:260:3 | s1 | string.cpp:260:10:260:11 | ref arg b1 | TAINT |
580605
| string.cpp:260:10:260:11 | ref arg b1 | string.cpp:261:7:261:8 | b1 | |
606+
| string.cpp:263:2:263:3 | s2 | string.cpp:263:10:263:11 | ref arg b2 | TAINT |
581607
| string.cpp:263:10:263:11 | ref arg b2 | string.cpp:264:7:264:8 | b2 | |
582608
| string.cpp:268:17:268:23 | hello | string.cpp:268:17:268:24 | call to basic_string | TAINT |
583609
| string.cpp:268:17:268:24 | call to basic_string | string.cpp:273:7:273:8 | s1 | |
@@ -596,9 +622,13 @@
596622
| string.cpp:271:17:271:25 | call to basic_string | string.cpp:279:2:279:3 | s4 | |
597623
| string.cpp:271:17:271:25 | call to basic_string | string.cpp:284:7:284:8 | s4 | |
598624
| string.cpp:278:2:278:3 | ref arg s1 | string.cpp:281:7:281:8 | s1 | |
625+
| string.cpp:278:2:278:3 | s1 | string.cpp:278:10:278:11 | ref arg s2 | TAINT |
599626
| string.cpp:278:10:278:11 | ref arg s2 | string.cpp:282:7:282:8 | s2 | |
627+
| string.cpp:278:10:278:11 | s2 | string.cpp:278:2:278:3 | ref arg s1 | TAINT |
600628
| string.cpp:279:2:279:3 | ref arg s4 | string.cpp:284:7:284:8 | s4 | |
629+
| string.cpp:279:2:279:3 | s4 | string.cpp:279:10:279:11 | ref arg s3 | TAINT |
601630
| string.cpp:279:10:279:11 | ref arg s3 | string.cpp:283:7:283:8 | s3 | |
631+
| string.cpp:279:10:279:11 | s3 | string.cpp:279:2:279:3 | ref arg s4 | TAINT |
602632
| string.cpp:288:17:288:22 | call to source | string.cpp:288:17:288:25 | call to basic_string | TAINT |
603633
| string.cpp:288:17:288:25 | call to basic_string | string.cpp:292:7:292:8 | s1 | |
604634
| string.cpp:288:17:288:25 | call to basic_string | string.cpp:296:2:296:3 | s1 | |
@@ -620,14 +650,18 @@
620650
| string.cpp:308:16:308:21 | call to source | string.cpp:308:16:308:24 | call to basic_string | TAINT |
621651
| string.cpp:308:16:308:24 | call to basic_string | string.cpp:311:7:311:7 | b | |
622652
| string.cpp:308:16:308:24 | call to basic_string | string.cpp:313:7:313:7 | b | |
653+
| string.cpp:310:7:310:7 | a | string.cpp:310:9:310:12 | call to data | TAINT |
623654
| string.cpp:310:7:310:7 | ref arg a | string.cpp:312:7:312:7 | a | |
655+
| string.cpp:311:7:311:7 | b | string.cpp:311:9:311:12 | call to data | TAINT |
624656
| string.cpp:311:7:311:7 | ref arg b | string.cpp:313:7:313:7 | b | |
625657
| string.cpp:318:16:318:20 | 123 | string.cpp:318:16:318:21 | call to basic_string | TAINT |
626658
| string.cpp:318:16:318:21 | call to basic_string | string.cpp:321:7:321:7 | a | |
627659
| string.cpp:318:16:318:21 | call to basic_string | string.cpp:321:19:321:19 | a | |
628660
| string.cpp:319:16:319:21 | call to source | string.cpp:319:16:319:24 | call to basic_string | TAINT |
629661
| string.cpp:319:16:319:24 | call to basic_string | string.cpp:322:7:322:7 | b | |
630662
| string.cpp:319:16:319:24 | call to basic_string | string.cpp:322:19:322:19 | b | |
663+
| string.cpp:321:7:321:7 | a | string.cpp:321:9:321:14 | call to substr | TAINT |
664+
| string.cpp:322:7:322:7 | b | string.cpp:322:9:322:14 | call to substr | TAINT |
631665
| stringstream.cpp:13:20:13:22 | call to basic_stringstream | stringstream.cpp:16:2:16:4 | ss1 | |
632666
| stringstream.cpp:13:20:13:22 | call to basic_stringstream | stringstream.cpp:22:7:22:9 | ss1 | |
633667
| stringstream.cpp:13:20:13:22 | call to basic_stringstream | stringstream.cpp:27:7:27:9 | ss1 | |

cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,11 @@ void test_string_assign() {
195195
sink(s3.assign(s1));
196196
sink(s3);
197197

198-
sink(s4.assign(s2)); // tainted [NOT DETECTED]
199-
sink(s4); // tainted [NOT DETECTED]
198+
sink(s4.assign(s2)); // tainted
199+
sink(s4); // tainted
200200

201-
sink(s5.assign(10, c)); // tainted [NOT DETECTED]
202-
sink(s5); // tainted [NOT DETECTED]
201+
sink(s5.assign(10, c)); // tainted
202+
sink(s5); // tainted
203203

204204
sink(s6.assign(s1));
205205
sink(s6); // [FALSE POSITIVE]
@@ -220,12 +220,12 @@ void test_string_insert() {
220220
sink(s4); // tainted
221221

222222
s5 = s1;
223-
sink(s5.insert(0, s2)); // tainted [NOT DETECTED]
224-
sink(s5); // tainted [NOT DETECTED]
223+
sink(s5.insert(0, s2)); // tainted
224+
sink(s5); // tainted
225225

226226
s6 = s1;
227-
sink(s6.insert(0, 10, c)); // tainted [NOT DETECTED]
228-
sink(s6); // tainted [NOT DETECTED]
227+
sink(s6.insert(0, 10, c)); // tainted
228+
sink(s6); // tainted
229229
}
230230

231231
void test_string_replace() {
@@ -243,12 +243,12 @@ void test_string_replace() {
243243
sink(s4); // tainted
244244

245245
s5 = s1;
246-
sink(s5.replace(1, 2, s2)); // tainted [NOT DETECTED]
247-
sink(s5); // tainted [NOT DETECTED]
246+
sink(s5.replace(1, 2, s2)); // tainted
247+
sink(s5); // tainted
248248

249249
s6 = s1;
250-
sink(s6.replace(1, 2, 10, c)); // tainted [NOT DETECTED]
251-
sink(s6); // tainted [NOT DETECTED]
250+
sink(s6.replace(1, 2, 10, c)); // tainted
251+
sink(s6); // tainted
252252
}
253253

254254
void test_string_copy() {
@@ -261,7 +261,7 @@ void test_string_copy() {
261261
sink(b1);
262262

263263
s2.copy(b2, s1.length(), 0);
264-
sink(b2); // tainted [NOT DETECTED]
264+
sink(b2); // tainted
265265
}
266266

267267
void test_string_swap() {
@@ -278,9 +278,9 @@ void test_string_swap() {
278278
s1.swap(s2);
279279
s4.swap(s3);
280280

281-
sink(s1); // tainted [NOT DETECTED]
281+
sink(s1); // tainted
282282
sink(s2); // [FALSE POSITIVE]
283-
sink(s3); // tainted [NOT DETECTED]
283+
sink(s3); // tainted
284284
sink(s4); // [FALSE POSITIVE]
285285
}
286286

@@ -308,7 +308,7 @@ void test_string_data()
308308
std::string b(source());
309309

310310
sink(a.data());
311-
sink(b.data()); // tainted // [FALSE POSITIVE]
311+
sink(b.data()); // tainted
312312
sink(a.length());
313313
sink(b.length());
314314
}
@@ -319,5 +319,5 @@ void test_string_substr()
319319
std::string b(source());
320320

321321
sink(a.substr(0, a.length()));
322-
sink(b.substr(0, b.length())); // tainted // [FALSE POSITIVE]
322+
sink(b.substr(0, b.length())); // tainted
323323
}

cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,35 @@
6060
| string.cpp:171:8:171:9 | s8 | string.cpp:154:18:154:23 | call to source |
6161
| string.cpp:176:8:176:9 | s9 | string.cpp:174:13:174:18 | call to source |
6262
| string.cpp:184:8:184:10 | s10 | string.cpp:181:12:181:26 | call to source |
63+
| string.cpp:198:10:198:15 | call to assign | string.cpp:190:17:190:22 | call to source |
64+
| string.cpp:199:7:199:8 | s4 | string.cpp:190:17:190:22 | call to source |
65+
| string.cpp:201:10:201:15 | call to assign | string.cpp:191:11:191:25 | call to source |
66+
| string.cpp:202:7:202:8 | s5 | string.cpp:191:11:191:25 | call to source |
6367
| string.cpp:205:7:205:8 | s6 | string.cpp:193:17:193:22 | call to source |
6468
| string.cpp:220:7:220:8 | s4 | string.cpp:210:17:210:22 | call to source |
69+
| string.cpp:223:10:223:15 | call to insert | string.cpp:210:17:210:22 | call to source |
70+
| string.cpp:224:7:224:8 | s5 | string.cpp:210:17:210:22 | call to source |
71+
| string.cpp:227:10:227:15 | call to insert | string.cpp:211:11:211:25 | call to source |
72+
| string.cpp:228:7:228:8 | s6 | string.cpp:211:11:211:25 | call to source |
6573
| string.cpp:243:7:243:8 | s4 | string.cpp:233:17:233:22 | call to source |
74+
| string.cpp:246:10:246:16 | call to replace | string.cpp:233:17:233:22 | call to source |
75+
| string.cpp:247:7:247:8 | s5 | string.cpp:233:17:233:22 | call to source |
76+
| string.cpp:250:10:250:16 | call to replace | string.cpp:234:11:234:25 | call to source |
77+
| string.cpp:251:7:251:8 | s6 | string.cpp:234:11:234:25 | call to source |
78+
| string.cpp:264:7:264:8 | b2 | string.cpp:258:17:258:22 | call to source |
6679
| string.cpp:274:7:274:8 | s2 | string.cpp:269:17:269:22 | call to source |
6780
| string.cpp:276:7:276:8 | s4 | string.cpp:271:17:271:22 | call to source |
81+
| string.cpp:281:7:281:8 | s1 | string.cpp:269:17:269:22 | call to source |
6882
| string.cpp:282:7:282:8 | s2 | string.cpp:269:17:269:22 | call to source |
83+
| string.cpp:283:7:283:8 | s3 | string.cpp:271:17:271:22 | call to source |
6984
| string.cpp:284:7:284:8 | s4 | string.cpp:271:17:271:22 | call to source |
7085
| string.cpp:292:7:292:8 | s1 | string.cpp:288:17:288:22 | call to source |
7186
| string.cpp:293:7:293:8 | s2 | string.cpp:289:17:289:22 | call to source |
7287
| string.cpp:294:7:294:8 | s3 | string.cpp:290:17:290:22 | call to source |
7388
| string.cpp:300:7:300:8 | s1 | string.cpp:288:17:288:22 | call to source |
7489
| string.cpp:302:7:302:8 | s3 | string.cpp:290:17:290:22 | call to source |
90+
| string.cpp:311:9:311:12 | call to data | string.cpp:308:16:308:21 | call to source |
91+
| string.cpp:322:9:322:14 | call to substr | string.cpp:319:16:319:21 | call to source |
7592
| structlikeclass.cpp:35:8:35:9 | s1 | structlikeclass.cpp:29:22:29:27 | call to source |
7693
| structlikeclass.cpp:36:8:36:9 | s2 | structlikeclass.cpp:30:24:30:29 | call to source |
7794
| structlikeclass.cpp:37:8:37:9 | s3 | structlikeclass.cpp:29:22:29:27 | call to source |

cpp/ql/test/library-tests/dataflow/taint-tests/test_diff.expected

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,35 @@
5757
| string.cpp:171:8:171:9 | string.cpp:154:18:154:23 | AST only |
5858
| string.cpp:176:8:176:9 | string.cpp:174:13:174:18 | AST only |
5959
| string.cpp:184:8:184:10 | string.cpp:181:12:181:26 | AST only |
60+
| string.cpp:198:10:198:15 | string.cpp:190:17:190:22 | AST only |
61+
| string.cpp:199:7:199:8 | string.cpp:190:17:190:22 | AST only |
62+
| string.cpp:201:10:201:15 | string.cpp:191:11:191:25 | AST only |
63+
| string.cpp:202:7:202:8 | string.cpp:191:11:191:25 | AST only |
6064
| string.cpp:205:7:205:8 | string.cpp:193:17:193:22 | AST only |
6165
| string.cpp:220:7:220:8 | string.cpp:210:17:210:22 | AST only |
66+
| string.cpp:223:10:223:15 | string.cpp:210:17:210:22 | AST only |
67+
| string.cpp:224:7:224:8 | string.cpp:210:17:210:22 | AST only |
68+
| string.cpp:227:10:227:15 | string.cpp:211:11:211:25 | AST only |
69+
| string.cpp:228:7:228:8 | string.cpp:211:11:211:25 | AST only |
6270
| string.cpp:243:7:243:8 | string.cpp:233:17:233:22 | AST only |
71+
| string.cpp:246:10:246:16 | string.cpp:233:17:233:22 | AST only |
72+
| string.cpp:247:7:247:8 | string.cpp:233:17:233:22 | AST only |
73+
| string.cpp:250:10:250:16 | string.cpp:234:11:234:25 | AST only |
74+
| string.cpp:251:7:251:8 | string.cpp:234:11:234:25 | AST only |
75+
| string.cpp:264:7:264:8 | string.cpp:258:17:258:22 | AST only |
6376
| string.cpp:274:7:274:8 | string.cpp:269:17:269:22 | AST only |
6477
| string.cpp:276:7:276:8 | string.cpp:271:17:271:22 | AST only |
78+
| string.cpp:281:7:281:8 | string.cpp:269:17:269:22 | AST only |
6579
| string.cpp:282:7:282:8 | string.cpp:269:17:269:22 | AST only |
80+
| string.cpp:283:7:283:8 | string.cpp:271:17:271:22 | AST only |
6681
| string.cpp:284:7:284:8 | string.cpp:271:17:271:22 | AST only |
6782
| string.cpp:292:7:292:8 | string.cpp:288:17:288:22 | AST only |
6883
| string.cpp:293:7:293:8 | string.cpp:289:17:289:22 | AST only |
6984
| string.cpp:294:7:294:8 | string.cpp:290:17:290:22 | AST only |
7085
| string.cpp:300:7:300:8 | string.cpp:288:17:288:22 | AST only |
7186
| string.cpp:302:7:302:8 | string.cpp:290:17:290:22 | AST only |
87+
| string.cpp:311:9:311:12 | string.cpp:308:16:308:21 | AST only |
88+
| string.cpp:322:9:322:14 | string.cpp:319:16:319:21 | AST only |
7289
| structlikeclass.cpp:35:8:35:9 | structlikeclass.cpp:29:22:29:27 | AST only |
7390
| structlikeclass.cpp:36:8:36:9 | structlikeclass.cpp:30:24:30:29 | AST only |
7491
| structlikeclass.cpp:37:8:37:9 | structlikeclass.cpp:29:22:29:27 | AST only |

0 commit comments

Comments
 (0)