C++: Model std::swap.

This commit is contained in:
Geoffrey White
2020-09-24 15:15:40 +01:00
parent 49f9a76c54
commit 0dca7f81bc
7 changed files with 270 additions and 35 deletions

View File

@@ -15,6 +15,7 @@ private import implementations.Strcpy
private import implementations.Strdup
private import implementations.Strftime
private import implementations.StdContainer
private import implementations.StdPair
private import implementations.StdString
private import implementations.Swap
private import implementations.GetDelim

View File

@@ -0,0 +1,60 @@
/**
* Provides models for the C++ `std::pair` class.
*/
import semmle.code.cpp.models.interfaces.Taint
/**
* Additional model for `std::pair` constructors.
*/
class StdPairConstructor extends Constructor, TaintFunction {
StdPairConstructor() { this.getDeclaringType().hasQualifiedName("std", "pair") }
/**
* Gets the index of a parameter to this function that is a reference to the
* value type of the container.
*/
int getAValueTypeParameterIndex() {
getParameter(result).getUnspecifiedType().(ReferenceType).getBaseType() =
getDeclaringType().getTemplateArgument(_).(Type).getUnspecifiedType() // i.e. the `T1` or `T2` of this `std::pair<T1, T2>`
}
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
// taint flow from any parameter of the value type to the returned object
input.isParameterDeref(getAValueTypeParameterIndex()) and
(
output.isReturnValue() // TODO: this is only needed for AST data flow, which treats constructors as returning the new object
or
output.isQualifierObject()
)
}
}
/**
* An instantiation of `std::make_pair`.
*/
class StdMakePair extends TaintFunction {
StdMakePair() { this.hasQualifiedName("std", "make_pair") }
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
// taint flow from any parameter to the returned object
input.isParameterDeref(_) and
output.isReturnValue()
}
}
/**
* The standard pair `swap` function.
*/
class StdPairSwap extends TaintFunction {
StdPairSwap() { this.hasQualifiedName("std", "pair", "swap") }
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
// container1.swap(container2)
input.isQualifierObject() and
output.isParameterDeref(0)
or
input.isParameterDeref(0) and
output.isQualifierObject()
}
}

View File

@@ -430,23 +430,29 @@
| map.cpp:31:7:31:7 | c [post update] | map.cpp:32:7:32:7 | c | |
| map.cpp:31:7:31:7 | c [post update] | map.cpp:33:7:33:7 | c | |
| map.cpp:32:7:32:7 | c [post update] | map.cpp:33:7:33:7 | c | |
| map.cpp:35:30:35:34 | 123 | map.cpp:35:30:35:42 | call to pair | TAINT |
| map.cpp:35:30:35:42 | call to pair | map.cpp:36:7:36:7 | d | |
| map.cpp:35:30:35:42 | call to pair | map.cpp:37:7:37:7 | d | |
| map.cpp:35:30:35:42 | call to pair | map.cpp:38:7:38:7 | d | |
| map.cpp:35:37:35:41 | 456 | map.cpp:35:30:35:42 | call to pair | TAINT |
| map.cpp:36:7:36:7 | d [post update] | map.cpp:37:7:37:7 | d | |
| map.cpp:36:7:36:7 | d [post update] | map.cpp:38:7:38:7 | d | |
| map.cpp:37:7:37:7 | d [post update] | map.cpp:38:7:38:7 | d | |
| map.cpp:40:30:40:35 | call to source | map.cpp:40:30:40:45 | call to pair | TAINT |
| map.cpp:40:30:40:45 | call to pair | map.cpp:41:7:41:7 | e | |
| map.cpp:40:30:40:45 | call to pair | map.cpp:42:7:42:7 | e | |
| map.cpp:40:30:40:45 | call to pair | map.cpp:43:7:43:7 | e | |
| map.cpp:40:40:40:44 | 456 | map.cpp:40:30:40:45 | call to pair | TAINT |
| map.cpp:41:7:41:7 | e [post update] | map.cpp:42:7:42:7 | e | |
| map.cpp:41:7:41:7 | e [post update] | map.cpp:43:7:43:7 | e | |
| map.cpp:42:7:42:7 | e [post update] | map.cpp:43:7:43:7 | e | |
| map.cpp:45:30:45:34 | 123 | map.cpp:45:30:45:45 | call to pair | TAINT |
| map.cpp:45:30:45:45 | call to pair | map.cpp:46:7:46:7 | f | |
| map.cpp:45:30:45:45 | call to pair | map.cpp:47:7:47:7 | f | |
| map.cpp:45:30:45:45 | call to pair | map.cpp:48:7:48:7 | f | |
| map.cpp:45:30:45:45 | call to pair | map.cpp:50:30:50:30 | f | |
| map.cpp:45:30:45:45 | call to pair | map.cpp:56:6:56:6 | f | |
| map.cpp:45:37:45:42 | call to source | map.cpp:45:30:45:45 | call to pair | TAINT |
| map.cpp:46:7:46:7 | f [post update] | map.cpp:47:7:47:7 | f | |
| map.cpp:46:7:46:7 | f [post update] | map.cpp:48:7:48:7 | f | |
| map.cpp:46:7:46:7 | f [post update] | map.cpp:50:30:50:30 | f | |
@@ -467,31 +473,43 @@
| map.cpp:57:7:57:7 | h [post update] | map.cpp:58:7:58:7 | h | |
| map.cpp:57:7:57:7 | h [post update] | map.cpp:59:7:59:7 | h | |
| map.cpp:58:7:58:7 | h [post update] | map.cpp:59:7:59:7 | h | |
| map.cpp:61:30:61:34 | 123 | map.cpp:61:30:61:42 | call to pair | TAINT |
| map.cpp:61:30:61:42 | call to pair | map.cpp:65:3:65:3 | i | |
| map.cpp:61:30:61:42 | call to pair | map.cpp:67:7:67:7 | i | |
| map.cpp:61:30:61:42 | call to pair | map.cpp:68:7:68:7 | i | |
| map.cpp:61:30:61:42 | call to pair | map.cpp:69:7:69:7 | i | |
| map.cpp:61:37:61:41 | 456 | map.cpp:61:30:61:42 | call to pair | TAINT |
| map.cpp:62:30:62:34 | 123 | map.cpp:62:30:62:45 | call to pair | TAINT |
| map.cpp:62:30:62:45 | call to pair | map.cpp:65:10:65:10 | j | |
| map.cpp:62:30:62:45 | call to pair | map.cpp:70:7:70:7 | j | |
| map.cpp:62:30:62:45 | call to pair | map.cpp:71:7:71:7 | j | |
| map.cpp:62:30:62:45 | call to pair | map.cpp:72:7:72:7 | j | |
| map.cpp:62:37:62:42 | call to source | map.cpp:62:30:62:45 | call to pair | TAINT |
| map.cpp:63:30:63:34 | 123 | map.cpp:63:30:63:45 | call to pair | TAINT |
| map.cpp:63:30:63:45 | call to pair | map.cpp:66:2:66:2 | k | |
| map.cpp:63:30:63:45 | call to pair | map.cpp:73:7:73:7 | k | |
| map.cpp:63:30:63:45 | call to pair | map.cpp:74:7:74:7 | k | |
| map.cpp:63:30:63:45 | call to pair | map.cpp:75:7:75:7 | k | |
| map.cpp:63:37:63:42 | call to source | map.cpp:63:30:63:45 | call to pair | TAINT |
| map.cpp:64:30:64:34 | 123 | map.cpp:64:30:64:42 | call to pair | TAINT |
| map.cpp:64:30:64:42 | call to pair | map.cpp:66:9:66:9 | l | |
| map.cpp:64:30:64:42 | call to pair | map.cpp:76:7:76:7 | l | |
| map.cpp:64:30:64:42 | call to pair | map.cpp:77:7:77:7 | l | |
| map.cpp:64:30:64:42 | call to pair | map.cpp:78:7:78:7 | l | |
| map.cpp:64:37:64:41 | 456 | map.cpp:64:30:64:42 | call to pair | TAINT |
| map.cpp:65:3:65:3 | i | map.cpp:65:10:65:10 | ref arg j | TAINT |
| map.cpp:65:3:65:3 | ref arg i | map.cpp:67:7:67:7 | i | |
| map.cpp:65:3:65:3 | ref arg i | map.cpp:68:7:68:7 | i | |
| map.cpp:65:3:65:3 | ref arg i | map.cpp:69:7:69:7 | i | |
| map.cpp:65:10:65:10 | j | map.cpp:65:3:65:3 | ref arg i | TAINT |
| map.cpp:65:10:65:10 | ref arg j | map.cpp:70:7:70:7 | j | |
| map.cpp:65:10:65:10 | ref arg j | map.cpp:71:7:71:7 | j | |
| map.cpp:65:10:65:10 | ref arg j | map.cpp:72:7:72:7 | j | |
| map.cpp:66:2:66:2 | k | map.cpp:66:9:66:9 | ref arg l | TAINT |
| map.cpp:66:2:66:2 | ref arg k | map.cpp:73:7:73:7 | k | |
| map.cpp:66:2:66:2 | ref arg k | map.cpp:74:7:74:7 | k | |
| map.cpp:66:2:66:2 | ref arg k | map.cpp:75:7:75:7 | k | |
| map.cpp:66:9:66:9 | l | map.cpp:66:2:66:2 | ref arg k | TAINT |
| map.cpp:66:9:66:9 | ref arg l | map.cpp:76:7:76:7 | l | |
| map.cpp:66:9:66:9 | ref arg l | map.cpp:77:7:77:7 | l | |
| map.cpp:66:9:66:9 | ref arg l | map.cpp:78:7:78:7 | l | |
@@ -508,8 +526,26 @@
| map.cpp:76:7:76:7 | l [post update] | map.cpp:78:7:78:7 | l | |
| map.cpp:77:7:77:7 | l [post update] | map.cpp:78:7:78:7 | l | |
| map.cpp:80:7:80:15 | call to make_pair | map.cpp:80:7:80:29 | call to pair | TAINT |
| map.cpp:80:17:80:21 | 123 | map.cpp:80:7:80:15 | call to make_pair | TAINT |
| map.cpp:80:24:80:28 | 456 | map.cpp:80:7:80:15 | call to make_pair | TAINT |
| map.cpp:81:17:81:21 | 123 | map.cpp:81:7:81:15 | call to make_pair | TAINT |
| map.cpp:81:24:81:28 | 456 | map.cpp:81:7:81:15 | call to make_pair | TAINT |
| map.cpp:82:17:82:21 | 123 | map.cpp:82:7:82:15 | call to make_pair | TAINT |
| map.cpp:82:24:82:28 | 456 | map.cpp:82:7:82:15 | call to make_pair | TAINT |
| map.cpp:83:7:83:15 | call to make_pair | map.cpp:83:7:83:32 | call to pair | TAINT |
| map.cpp:83:17:83:22 | call to source | map.cpp:83:7:83:15 | call to make_pair | TAINT |
| map.cpp:83:27:83:31 | 456 | map.cpp:83:7:83:15 | call to make_pair | TAINT |
| map.cpp:84:17:84:22 | call to source | map.cpp:84:7:84:15 | call to make_pair | TAINT |
| map.cpp:84:27:84:31 | 456 | map.cpp:84:7:84:15 | call to make_pair | TAINT |
| map.cpp:85:17:85:22 | call to source | map.cpp:85:7:85:15 | call to make_pair | TAINT |
| map.cpp:85:27:85:31 | 456 | map.cpp:85:7:85:15 | call to make_pair | TAINT |
| map.cpp:86:7:86:15 | call to make_pair | map.cpp:86:7:86:32 | call to pair | TAINT |
| map.cpp:86:17:86:21 | 123 | map.cpp:86:7:86:15 | call to make_pair | TAINT |
| map.cpp:86:24:86:29 | call to source | map.cpp:86:7:86:15 | call to make_pair | TAINT |
| map.cpp:87:17:87:21 | 123 | map.cpp:87:7:87:15 | call to make_pair | TAINT |
| map.cpp:87:24:87:29 | call to source | map.cpp:87:7:87:15 | call to make_pair | TAINT |
| map.cpp:88:17:88:21 | 123 | map.cpp:88:7:88:15 | call to make_pair | TAINT |
| map.cpp:88:24:88:29 | call to source | map.cpp:88:7:88:15 | call to make_pair | TAINT |
| map.cpp:91:6:91:14 | call to make_pair | map.cpp:91:6:91:49 | call to pair | TAINT |
| map.cpp:91:6:91:49 | call to pair | map.cpp:91:2:91:49 | ... = ... | |
| map.cpp:91:6:91:49 | call to pair | map.cpp:92:7:92:7 | m | |
@@ -517,6 +553,10 @@
| map.cpp:91:6:91:49 | call to pair | map.cpp:94:7:94:7 | m | |
| map.cpp:91:6:91:49 | call to pair | map.cpp:95:7:95:7 | m | |
| map.cpp:91:6:91:49 | call to pair | map.cpp:96:7:96:7 | m | |
| map.cpp:91:16:91:24 | call to make_pair | map.cpp:91:6:91:14 | call to make_pair | TAINT |
| map.cpp:91:26:91:30 | 123 | map.cpp:91:16:91:24 | call to make_pair | TAINT |
| map.cpp:91:33:91:38 | call to source | map.cpp:91:16:91:24 | call to make_pair | TAINT |
| map.cpp:91:44:91:48 | 789 | map.cpp:91:6:91:14 | call to make_pair | TAINT |
| map.cpp:92:7:92:7 | m | map.cpp:92:7:92:7 | call to pair | TAINT |
| map.cpp:94:7:94:7 | m [post update] | map.cpp:95:7:95:7 | m | |
| map.cpp:94:7:94:7 | m [post update] | map.cpp:96:7:96:7 | m | |
@@ -575,6 +615,8 @@
| map.cpp:104:7:104:8 | ref arg m1 | map.cpp:143:30:143:31 | m1 | |
| map.cpp:104:7:104:8 | ref arg m1 | map.cpp:249:1:249:1 | m1 | |
| map.cpp:104:17:104:30 | call to make_pair | map.cpp:104:17:104:44 | call to pair | TAINT |
| map.cpp:104:32:104:36 | abc | map.cpp:104:17:104:30 | call to make_pair | TAINT |
| map.cpp:104:39:104:43 | def | map.cpp:104:17:104:30 | call to make_pair | TAINT |
| map.cpp:104:47:104:51 | first | map.cpp:104:7:104:51 | call to iterator | |
| map.cpp:105:7:105:8 | ref arg m2 | map.cpp:111:7:111:8 | m2 | |
| map.cpp:105:7:105:8 | ref arg m2 | map.cpp:117:7:117:8 | m2 | |
@@ -592,6 +634,8 @@
| map.cpp:105:7:105:8 | ref arg m2 | map.cpp:184:7:184:8 | m2 | |
| map.cpp:105:7:105:8 | ref arg m2 | map.cpp:249:1:249:1 | m2 | |
| map.cpp:105:17:105:30 | call to make_pair | map.cpp:105:17:105:47 | call to pair | TAINT |
| map.cpp:105:32:105:36 | abc | map.cpp:105:17:105:30 | call to make_pair | TAINT |
| map.cpp:105:39:105:44 | call to source | map.cpp:105:17:105:30 | call to make_pair | TAINT |
| map.cpp:105:50:105:54 | first | map.cpp:105:7:105:54 | call to iterator | |
| map.cpp:106:7:106:8 | ref arg m3 | map.cpp:112:7:112:8 | m3 | |
| map.cpp:106:7:106:8 | ref arg m3 | map.cpp:118:7:118:8 | m3 | |
@@ -600,6 +644,8 @@
| map.cpp:106:7:106:8 | ref arg m3 | map.cpp:155:30:155:31 | m3 | |
| map.cpp:106:7:106:8 | ref arg m3 | map.cpp:249:1:249:1 | m3 | |
| map.cpp:106:17:106:30 | call to make_pair | map.cpp:106:17:106:47 | call to pair | TAINT |
| map.cpp:106:32:106:37 | call to source | map.cpp:106:17:106:30 | call to make_pair | TAINT |
| map.cpp:106:42:106:46 | def | map.cpp:106:17:106:30 | call to make_pair | TAINT |
| map.cpp:106:50:106:54 | first | map.cpp:106:7:106:54 | call to iterator | |
| map.cpp:107:7:107:8 | ref arg m4 | map.cpp:113:7:113:8 | m4 | |
| map.cpp:107:7:107:8 | ref arg m4 | map.cpp:119:7:119:8 | m4 | |
@@ -612,6 +658,8 @@
| map.cpp:107:17:107:18 | ref arg m4 | map.cpp:249:1:249:1 | m4 | |
| map.cpp:107:20:107:24 | call to begin | map.cpp:107:17:107:26 | call to iterator | TAINT |
| map.cpp:107:29:107:70 | call to pair | map.cpp:107:29:107:70 | call to pair | TAINT |
| map.cpp:107:55:107:59 | abc | map.cpp:107:29:107:70 | call to pair | TAINT |
| map.cpp:107:62:107:67 | call to source | map.cpp:107:29:107:70 | call to pair | TAINT |
| map.cpp:108:7:108:8 | ref arg m5 | map.cpp:114:7:114:8 | m5 | |
| map.cpp:108:7:108:8 | ref arg m5 | map.cpp:120:7:120:8 | m5 | |
| map.cpp:108:7:108:8 | ref arg m5 | map.cpp:126:7:126:8 | m5 | |
@@ -818,15 +866,23 @@
| map.cpp:175:2:175:4 | ref arg m14 | map.cpp:178:2:178:4 | m14 | |
| map.cpp:175:2:175:4 | ref arg m14 | map.cpp:249:1:249:1 | m14 | |
| map.cpp:175:13:175:26 | call to make_pair | map.cpp:175:13:175:36 | call to pair | TAINT |
| map.cpp:175:28:175:30 | a | map.cpp:175:13:175:26 | call to make_pair | TAINT |
| map.cpp:175:33:175:35 | a | map.cpp:175:13:175:26 | call to make_pair | TAINT |
| map.cpp:176:2:176:4 | ref arg m14 | map.cpp:177:2:177:4 | m14 | |
| map.cpp:176:2:176:4 | ref arg m14 | map.cpp:178:2:178:4 | m14 | |
| map.cpp:176:2:176:4 | ref arg m14 | map.cpp:249:1:249:1 | m14 | |
| map.cpp:176:13:176:26 | call to make_pair | map.cpp:176:13:176:41 | call to pair | TAINT |
| map.cpp:176:28:176:30 | b | map.cpp:176:13:176:26 | call to make_pair | TAINT |
| map.cpp:176:33:176:38 | call to source | map.cpp:176:13:176:26 | call to make_pair | TAINT |
| map.cpp:177:2:177:4 | ref arg m14 | map.cpp:178:2:178:4 | m14 | |
| map.cpp:177:2:177:4 | ref arg m14 | map.cpp:249:1:249:1 | m14 | |
| map.cpp:177:13:177:26 | call to make_pair | map.cpp:177:13:177:41 | call to pair | TAINT |
| map.cpp:177:28:177:30 | c | map.cpp:177:13:177:26 | call to make_pair | TAINT |
| map.cpp:177:33:177:38 | call to source | map.cpp:177:13:177:26 | call to make_pair | TAINT |
| map.cpp:178:2:178:4 | ref arg m14 | map.cpp:249:1:249:1 | m14 | |
| map.cpp:178:13:178:26 | call to make_pair | map.cpp:178:13:178:36 | call to pair | TAINT |
| map.cpp:178:28:178:30 | d | map.cpp:178:13:178:26 | call to make_pair | TAINT |
| map.cpp:178:33:178:35 | d | map.cpp:178:13:178:26 | call to make_pair | TAINT |
| map.cpp:179:7:179:8 | ref arg m2 | map.cpp:180:7:180:8 | m2 | |
| map.cpp:179:7:179:8 | ref arg m2 | map.cpp:181:7:181:8 | m2 | |
| map.cpp:179:7:179:8 | ref arg m2 | map.cpp:182:7:182:8 | m2 | |
@@ -879,12 +935,16 @@
| map.cpp:188:2:188:4 | ref arg m15 | map.cpp:211:2:211:4 | m15 | |
| map.cpp:188:2:188:4 | ref arg m15 | map.cpp:249:1:249:1 | m15 | |
| map.cpp:188:13:188:57 | call to pair | map.cpp:188:13:188:57 | call to pair | TAINT |
| map.cpp:188:39:188:44 | call to source | map.cpp:188:13:188:57 | call to pair | TAINT |
| map.cpp:188:49:188:54 | call to source | map.cpp:188:13:188:57 | call to pair | TAINT |
| map.cpp:189:2:189:4 | ref arg m18 | map.cpp:193:7:193:9 | m18 | |
| map.cpp:189:2:189:4 | ref arg m18 | map.cpp:195:11:195:13 | m18 | |
| map.cpp:189:2:189:4 | ref arg m18 | map.cpp:199:7:199:9 | m18 | |
| map.cpp:189:2:189:4 | ref arg m18 | map.cpp:212:12:212:14 | m18 | |
| map.cpp:189:2:189:4 | ref arg m18 | map.cpp:249:1:249:1 | m18 | |
| map.cpp:189:13:189:57 | call to pair | map.cpp:189:13:189:57 | call to pair | TAINT |
| map.cpp:189:39:189:44 | call to source | map.cpp:189:13:189:57 | call to pair | TAINT |
| map.cpp:189:49:189:54 | call to source | map.cpp:189:13:189:57 | call to pair | TAINT |
| map.cpp:190:7:190:9 | m15 | map.cpp:190:7:190:9 | call to map | |
| map.cpp:191:7:191:9 | m16 | map.cpp:191:7:191:9 | call to map | |
| map.cpp:192:7:192:9 | m17 | map.cpp:192:7:192:9 | call to map | |
@@ -925,18 +985,26 @@
| map.cpp:203:2:203:4 | ref arg m19 | map.cpp:213:7:213:9 | m19 | |
| map.cpp:203:2:203:4 | ref arg m19 | map.cpp:249:1:249:1 | m19 | |
| map.cpp:203:13:203:57 | call to pair | map.cpp:203:13:203:57 | call to pair | TAINT |
| map.cpp:203:39:203:44 | call to source | map.cpp:203:13:203:57 | call to pair | TAINT |
| map.cpp:203:49:203:54 | call to source | map.cpp:203:13:203:57 | call to pair | TAINT |
| map.cpp:204:2:204:4 | ref arg m20 | map.cpp:208:7:208:9 | m20 | |
| map.cpp:204:2:204:4 | ref arg m20 | map.cpp:214:7:214:9 | m20 | |
| map.cpp:204:2:204:4 | ref arg m20 | map.cpp:249:1:249:1 | m20 | |
| map.cpp:204:13:204:51 | call to pair | map.cpp:204:13:204:51 | call to pair | TAINT |
| map.cpp:204:39:204:43 | abc | map.cpp:204:13:204:51 | call to pair | TAINT |
| map.cpp:204:46:204:50 | def | map.cpp:204:13:204:51 | call to pair | TAINT |
| map.cpp:205:2:205:4 | ref arg m21 | map.cpp:209:7:209:9 | m21 | |
| map.cpp:205:2:205:4 | ref arg m21 | map.cpp:215:7:215:9 | m21 | |
| map.cpp:205:2:205:4 | ref arg m21 | map.cpp:249:1:249:1 | m21 | |
| map.cpp:205:13:205:51 | call to pair | map.cpp:205:13:205:51 | call to pair | TAINT |
| map.cpp:205:39:205:43 | abc | map.cpp:205:13:205:51 | call to pair | TAINT |
| map.cpp:205:46:205:50 | def | map.cpp:205:13:205:51 | call to pair | TAINT |
| map.cpp:206:2:206:4 | ref arg m22 | map.cpp:210:7:210:9 | m22 | |
| map.cpp:206:2:206:4 | ref arg m22 | map.cpp:216:7:216:9 | m22 | |
| map.cpp:206:2:206:4 | ref arg m22 | map.cpp:249:1:249:1 | m22 | |
| map.cpp:206:13:206:57 | call to pair | map.cpp:206:13:206:57 | call to pair | TAINT |
| map.cpp:206:39:206:44 | call to source | map.cpp:206:13:206:57 | call to pair | TAINT |
| map.cpp:206:49:206:54 | call to source | map.cpp:206:13:206:57 | call to pair | TAINT |
| map.cpp:207:7:207:9 | m19 | map.cpp:207:7:207:9 | call to map | |
| map.cpp:208:7:208:9 | m20 | map.cpp:208:7:208:9 | call to map | |
| map.cpp:209:7:209:9 | m21 | map.cpp:209:7:209:9 | call to map | |
@@ -967,6 +1035,8 @@
| map.cpp:220:2:220:4 | ref arg m23 | map.cpp:226:7:226:9 | m23 | |
| map.cpp:220:2:220:4 | ref arg m23 | map.cpp:249:1:249:1 | m23 | |
| map.cpp:220:13:220:57 | call to pair | map.cpp:220:13:220:57 | call to pair | TAINT |
| map.cpp:220:39:220:44 | call to source | map.cpp:220:13:220:57 | call to pair | TAINT |
| map.cpp:220:49:220:54 | call to source | map.cpp:220:13:220:57 | call to pair | TAINT |
| map.cpp:221:2:221:4 | ref arg m23 | map.cpp:222:7:222:9 | m23 | |
| map.cpp:221:2:221:4 | ref arg m23 | map.cpp:223:7:223:9 | m23 | |
| map.cpp:221:2:221:4 | ref arg m23 | map.cpp:223:17:223:19 | m23 | |
@@ -975,6 +1045,8 @@
| map.cpp:221:2:221:4 | ref arg m23 | map.cpp:226:7:226:9 | m23 | |
| map.cpp:221:2:221:4 | ref arg m23 | map.cpp:249:1:249:1 | m23 | |
| map.cpp:221:13:221:57 | call to pair | map.cpp:221:13:221:57 | call to pair | TAINT |
| map.cpp:221:39:221:44 | call to source | map.cpp:221:13:221:57 | call to pair | TAINT |
| map.cpp:221:49:221:54 | call to source | map.cpp:221:13:221:57 | call to pair | TAINT |
| map.cpp:222:7:222:9 | m23 | map.cpp:222:7:222:9 | call to map | |
| map.cpp:223:7:223:9 | ref arg m23 | map.cpp:224:7:224:9 | m23 | |
| map.cpp:223:7:223:9 | ref arg m23 | map.cpp:225:2:225:4 | m23 | |
@@ -1124,6 +1196,8 @@
| map.cpp:256:7:256:8 | ref arg m1 | map.cpp:295:30:295:31 | m1 | |
| map.cpp:256:7:256:8 | ref arg m1 | map.cpp:398:1:398:1 | m1 | |
| map.cpp:256:17:256:30 | call to make_pair | map.cpp:256:17:256:44 | call to pair | TAINT |
| map.cpp:256:32:256:36 | abc | map.cpp:256:17:256:30 | call to make_pair | TAINT |
| map.cpp:256:39:256:43 | def | map.cpp:256:17:256:30 | call to make_pair | TAINT |
| map.cpp:256:47:256:51 | first | map.cpp:256:7:256:51 | call to iterator | |
| map.cpp:257:7:257:8 | ref arg m2 | map.cpp:263:7:263:8 | m2 | |
| map.cpp:257:7:257:8 | ref arg m2 | map.cpp:269:7:269:8 | m2 | |
@@ -1138,6 +1212,8 @@
| map.cpp:257:7:257:8 | ref arg m2 | map.cpp:333:7:333:8 | m2 | |
| map.cpp:257:7:257:8 | ref arg m2 | map.cpp:398:1:398:1 | m2 | |
| map.cpp:257:17:257:30 | call to make_pair | map.cpp:257:17:257:47 | call to pair | TAINT |
| map.cpp:257:32:257:36 | abc | map.cpp:257:17:257:30 | call to make_pair | TAINT |
| map.cpp:257:39:257:44 | call to source | map.cpp:257:17:257:30 | call to make_pair | TAINT |
| map.cpp:257:50:257:54 | first | map.cpp:257:7:257:54 | call to iterator | |
| map.cpp:258:7:258:8 | ref arg m3 | map.cpp:264:7:264:8 | m3 | |
| map.cpp:258:7:258:8 | ref arg m3 | map.cpp:270:7:270:8 | m3 | |
@@ -1146,6 +1222,8 @@
| map.cpp:258:7:258:8 | ref arg m3 | map.cpp:307:30:307:31 | m3 | |
| map.cpp:258:7:258:8 | ref arg m3 | map.cpp:398:1:398:1 | m3 | |
| map.cpp:258:17:258:30 | call to make_pair | map.cpp:258:17:258:47 | call to pair | TAINT |
| map.cpp:258:32:258:37 | call to source | map.cpp:258:17:258:30 | call to make_pair | TAINT |
| map.cpp:258:42:258:46 | def | map.cpp:258:17:258:30 | call to make_pair | TAINT |
| map.cpp:258:50:258:54 | first | map.cpp:258:7:258:54 | call to iterator | |
| map.cpp:259:7:259:8 | ref arg m4 | map.cpp:265:7:265:8 | m4 | |
| map.cpp:259:7:259:8 | ref arg m4 | map.cpp:271:7:271:8 | m4 | |
@@ -1158,6 +1236,8 @@
| map.cpp:259:17:259:18 | ref arg m4 | map.cpp:398:1:398:1 | m4 | |
| map.cpp:259:20:259:24 | call to begin | map.cpp:259:17:259:26 | call to iterator | TAINT |
| map.cpp:259:29:259:70 | call to pair | map.cpp:259:29:259:70 | call to pair | TAINT |
| map.cpp:259:55:259:59 | abc | map.cpp:259:29:259:70 | call to pair | TAINT |
| map.cpp:259:62:259:67 | call to source | map.cpp:259:29:259:70 | call to pair | TAINT |
| map.cpp:260:7:260:8 | ref arg m5 | map.cpp:266:7:266:8 | m5 | |
| map.cpp:260:7:260:8 | ref arg m5 | map.cpp:272:7:272:8 | m5 | |
| map.cpp:260:7:260:8 | ref arg m5 | map.cpp:278:7:278:8 | m5 | |
@@ -1352,15 +1432,23 @@
| map.cpp:327:2:327:4 | ref arg m14 | map.cpp:330:2:330:4 | m14 | |
| map.cpp:327:2:327:4 | ref arg m14 | map.cpp:398:1:398:1 | m14 | |
| map.cpp:327:13:327:26 | call to make_pair | map.cpp:327:13:327:36 | call to pair | TAINT |
| map.cpp:327:28:327:30 | a | map.cpp:327:13:327:26 | call to make_pair | TAINT |
| map.cpp:327:33:327:35 | a | map.cpp:327:13:327:26 | call to make_pair | TAINT |
| map.cpp:328:2:328:4 | ref arg m14 | map.cpp:329:2:329:4 | m14 | |
| map.cpp:328:2:328:4 | ref arg m14 | map.cpp:330:2:330:4 | m14 | |
| map.cpp:328:2:328:4 | ref arg m14 | map.cpp:398:1:398:1 | m14 | |
| map.cpp:328:13:328:26 | call to make_pair | map.cpp:328:13:328:41 | call to pair | TAINT |
| map.cpp:328:28:328:30 | b | map.cpp:328:13:328:26 | call to make_pair | TAINT |
| map.cpp:328:33:328:38 | call to source | map.cpp:328:13:328:26 | call to make_pair | TAINT |
| map.cpp:329:2:329:4 | ref arg m14 | map.cpp:330:2:330:4 | m14 | |
| map.cpp:329:2:329:4 | ref arg m14 | map.cpp:398:1:398:1 | m14 | |
| map.cpp:329:13:329:26 | call to make_pair | map.cpp:329:13:329:41 | call to pair | TAINT |
| map.cpp:329:28:329:30 | c | map.cpp:329:13:329:26 | call to make_pair | TAINT |
| map.cpp:329:33:329:38 | call to source | map.cpp:329:13:329:26 | call to make_pair | TAINT |
| map.cpp:330:2:330:4 | ref arg m14 | map.cpp:398:1:398:1 | m14 | |
| map.cpp:330:13:330:26 | call to make_pair | map.cpp:330:13:330:36 | call to pair | TAINT |
| map.cpp:330:28:330:30 | d | map.cpp:330:13:330:26 | call to make_pair | TAINT |
| map.cpp:330:33:330:35 | d | map.cpp:330:13:330:26 | call to make_pair | TAINT |
| map.cpp:331:7:331:8 | ref arg m2 | map.cpp:332:7:332:8 | m2 | |
| map.cpp:331:7:331:8 | ref arg m2 | map.cpp:333:7:333:8 | m2 | |
| map.cpp:331:7:331:8 | ref arg m2 | map.cpp:398:1:398:1 | m2 | |
@@ -1398,12 +1486,16 @@
| map.cpp:337:2:337:4 | ref arg m15 | map.cpp:360:2:360:4 | m15 | |
| map.cpp:337:2:337:4 | ref arg m15 | map.cpp:398:1:398:1 | m15 | |
| map.cpp:337:13:337:57 | call to pair | map.cpp:337:13:337:57 | call to pair | TAINT |
| map.cpp:337:39:337:44 | call to source | map.cpp:337:13:337:57 | call to pair | TAINT |
| map.cpp:337:49:337:54 | call to source | map.cpp:337:13:337:57 | call to pair | TAINT |
| map.cpp:338:2:338:4 | ref arg m18 | map.cpp:342:7:342:9 | m18 | |
| map.cpp:338:2:338:4 | ref arg m18 | map.cpp:344:11:344:13 | m18 | |
| map.cpp:338:2:338:4 | ref arg m18 | map.cpp:348:7:348:9 | m18 | |
| map.cpp:338:2:338:4 | ref arg m18 | map.cpp:361:12:361:14 | m18 | |
| map.cpp:338:2:338:4 | ref arg m18 | map.cpp:398:1:398:1 | m18 | |
| map.cpp:338:13:338:57 | call to pair | map.cpp:338:13:338:57 | call to pair | TAINT |
| map.cpp:338:39:338:44 | call to source | map.cpp:338:13:338:57 | call to pair | TAINT |
| map.cpp:338:49:338:54 | call to source | map.cpp:338:13:338:57 | call to pair | TAINT |
| map.cpp:339:7:339:9 | m15 | map.cpp:339:7:339:9 | call to unordered_map | |
| map.cpp:340:7:340:9 | m16 | map.cpp:340:7:340:9 | call to unordered_map | |
| map.cpp:341:7:341:9 | m17 | map.cpp:341:7:341:9 | call to unordered_map | |
@@ -1444,18 +1536,26 @@
| map.cpp:352:2:352:4 | ref arg m19 | map.cpp:362:7:362:9 | m19 | |
| map.cpp:352:2:352:4 | ref arg m19 | map.cpp:398:1:398:1 | m19 | |
| map.cpp:352:13:352:57 | call to pair | map.cpp:352:13:352:57 | call to pair | TAINT |
| map.cpp:352:39:352:44 | call to source | map.cpp:352:13:352:57 | call to pair | TAINT |
| map.cpp:352:49:352:54 | call to source | map.cpp:352:13:352:57 | call to pair | TAINT |
| map.cpp:353:2:353:4 | ref arg m20 | map.cpp:357:7:357:9 | m20 | |
| map.cpp:353:2:353:4 | ref arg m20 | map.cpp:363:7:363:9 | m20 | |
| map.cpp:353:2:353:4 | ref arg m20 | map.cpp:398:1:398:1 | m20 | |
| map.cpp:353:13:353:51 | call to pair | map.cpp:353:13:353:51 | call to pair | TAINT |
| map.cpp:353:39:353:43 | abc | map.cpp:353:13:353:51 | call to pair | TAINT |
| map.cpp:353:46:353:50 | def | map.cpp:353:13:353:51 | call to pair | TAINT |
| map.cpp:354:2:354:4 | ref arg m21 | map.cpp:358:7:358:9 | m21 | |
| map.cpp:354:2:354:4 | ref arg m21 | map.cpp:364:7:364:9 | m21 | |
| map.cpp:354:2:354:4 | ref arg m21 | map.cpp:398:1:398:1 | m21 | |
| map.cpp:354:13:354:51 | call to pair | map.cpp:354:13:354:51 | call to pair | TAINT |
| map.cpp:354:39:354:43 | abc | map.cpp:354:13:354:51 | call to pair | TAINT |
| map.cpp:354:46:354:50 | def | map.cpp:354:13:354:51 | call to pair | TAINT |
| map.cpp:355:2:355:4 | ref arg m22 | map.cpp:359:7:359:9 | m22 | |
| map.cpp:355:2:355:4 | ref arg m22 | map.cpp:365:7:365:9 | m22 | |
| map.cpp:355:2:355:4 | ref arg m22 | map.cpp:398:1:398:1 | m22 | |
| map.cpp:355:13:355:57 | call to pair | map.cpp:355:13:355:57 | call to pair | TAINT |
| map.cpp:355:39:355:44 | call to source | map.cpp:355:13:355:57 | call to pair | TAINT |
| map.cpp:355:49:355:54 | call to source | map.cpp:355:13:355:57 | call to pair | TAINT |
| map.cpp:356:7:356:9 | m19 | map.cpp:356:7:356:9 | call to unordered_map | |
| map.cpp:357:7:357:9 | m20 | map.cpp:357:7:357:9 | call to unordered_map | |
| map.cpp:358:7:358:9 | m21 | map.cpp:358:7:358:9 | call to unordered_map | |
@@ -1486,6 +1586,8 @@
| map.cpp:369:2:369:4 | ref arg m23 | map.cpp:375:7:375:9 | m23 | |
| map.cpp:369:2:369:4 | ref arg m23 | map.cpp:398:1:398:1 | m23 | |
| map.cpp:369:13:369:57 | call to pair | map.cpp:369:13:369:57 | call to pair | TAINT |
| map.cpp:369:39:369:44 | call to source | map.cpp:369:13:369:57 | call to pair | TAINT |
| map.cpp:369:49:369:54 | call to source | map.cpp:369:13:369:57 | call to pair | TAINT |
| map.cpp:370:2:370:4 | ref arg m23 | map.cpp:371:7:371:9 | m23 | |
| map.cpp:370:2:370:4 | ref arg m23 | map.cpp:372:7:372:9 | m23 | |
| map.cpp:370:2:370:4 | ref arg m23 | map.cpp:372:17:372:19 | m23 | |
@@ -1494,6 +1596,8 @@
| map.cpp:370:2:370:4 | ref arg m23 | map.cpp:375:7:375:9 | m23 | |
| map.cpp:370:2:370:4 | ref arg m23 | map.cpp:398:1:398:1 | m23 | |
| map.cpp:370:13:370:57 | call to pair | map.cpp:370:13:370:57 | call to pair | TAINT |
| map.cpp:370:39:370:44 | call to source | map.cpp:370:13:370:57 | call to pair | TAINT |
| map.cpp:370:49:370:54 | call to source | map.cpp:370:13:370:57 | call to pair | TAINT |
| map.cpp:371:7:371:9 | m23 | map.cpp:371:7:371:9 | call to unordered_map | |
| map.cpp:372:7:372:9 | ref arg m23 | map.cpp:373:7:373:9 | m23 | |
| map.cpp:372:7:372:9 | ref arg m23 | map.cpp:374:2:374:4 | m23 | |

View File

@@ -38,25 +38,25 @@ void test_pair()
sink(d);
std::pair<char *, char *> e(source(), "456");
sink(e.first); // tainted [NOT DETECTED]
sink(e.second);
sink(e); // tainted [NOT DETECTED]
sink(e.first); // tainted
sink(e.second); // [FALSE POSITIVE]
sink(e); // tainted
std::pair<char *, char *> f("123", source());
sink(f.first);
sink(f.second); // tainted [NOT DETECTED]
sink(f); // tainted [NOT DETECTED]
sink(f.first); // [FALSE POSITIVE]
sink(f.second); // tainted
sink(f); // tainted
std::pair<char *, char *> g(f);
sink(g.first);
sink(g.second); // tainted [NOT DETECTED]
sink(g); // tainted [NOT DETECTED]
sink(g.first); // [FALSE POSITIVE]
sink(g.second); // tainted
sink(g); // tainted
std::pair<char *, char *> h;
h = f;
sink(h.first);
sink(h.second); // tainted [NOT DETECTED]
sink(h); // tainted [NOT DETECTED]
sink(h.first); // [FALSE POSITIVE]
sink(h.second); // tainted
sink(h); // tainted
std::pair<char *, char *> i("123", "456");
std::pair<char *, char *> j("123", source());
@@ -64,35 +64,35 @@ void test_pair()
std::pair<char *, char *> l("123", "456");
i.swap(j);
k.swap(l);
sink(i.first);
sink(i.second); // tainted [NOT DETECTED]
sink(i); // tainted [NOT DETECTED]
sink(j.first);
sink(j.second);
sink(j);
sink(k.first);
sink(k.second);
sink(k);
sink(l.first);
sink(l.second); // tainted [NOT DETECTED]
sink(l); // tainted [NOT DETECTED]
sink(i.first); // [FALSE POSITIVE]
sink(i.second); // tainted
sink(i); // tainted
sink(j.first); // [FALSE POSITIVE]
sink(j.second); // [FALSE POSITIVE]
sink(j); // [FALSE POSITIVE]
sink(k.first); // [FALSE POSITIVE]
sink(k.second); // [FALSE POSITIVE]
sink(k); // [FALSE POSITIVE]
sink(l.first); // [FALSE POSITIVE]
sink(l.second); // tainted
sink(l); // tainted
sink(make_pair("123", "456"));
sink(make_pair("123", "456").first);
sink(make_pair("123", "456").second);
sink(make_pair(source(), "456")); // tainted [NOT DETECTED]
sink(make_pair(source(), "456").first); // tainted [NOT DETECTED]
sink(make_pair(source(), "456").second);
sink(make_pair("123", source())); // tainted [NOT DETECTED]
sink(make_pair("123", source()).first);
sink(make_pair("123", source()).second); // tainted [NOT DETECTED]
sink(make_pair(source(), "456")); // tainted
sink(make_pair(source(), "456").first); // tainted
sink(make_pair(source(), "456").second); // [FALSE POSITIVE]
sink(make_pair("123", source())); // tainted
sink(make_pair("123", source()).first); // [FALSE POSITIVE]
sink(make_pair("123", source()).second); // tainted
std::pair<std::pair<char *, char *>, char *> m;
m = make_pair(make_pair("123", source()), "789");
sink(m); // tainted [NOT DETECTED]
sink(m.first); // tainted [NOT DETECTED]
sink(m.first.first);
sink(m.first.second); // tainted [NOT DETECTED]
sink(m); // tainted
sink(m.first); // tainted
sink(m.first.first); // [FALSE POSITIVE]
sink(m.first.second); // tainted
sink(m.second);
}

View File

@@ -35,6 +35,17 @@
| format.cpp:158:7:158:27 | ... + ... | format.cpp:148:16:148:30 | call to source |
| map.cpp:26:9:26:13 | first | map.cpp:25:12:25:17 | call to source |
| map.cpp:32:9:32:14 | second | map.cpp:30:13:30:18 | call to source |
| map.cpp:43:7:43:7 | e | map.cpp:40:30:40:35 | call to source |
| map.cpp:48:7:48:7 | f | map.cpp:45:37:45:42 | call to source |
| map.cpp:53:7:53:7 | g | map.cpp:45:37:45:42 | call to source |
| map.cpp:59:7:59:7 | h | map.cpp:45:37:45:42 | call to source |
| map.cpp:69:7:69:7 | i | map.cpp:62:37:62:42 | call to source |
| map.cpp:72:7:72:7 | j | map.cpp:62:37:62:42 | call to source |
| map.cpp:75:7:75:7 | k | map.cpp:63:37:63:42 | call to source |
| map.cpp:78:7:78:7 | l | map.cpp:63:37:63:42 | call to source |
| map.cpp:83:7:83:32 | call to pair | map.cpp:83:17:83:22 | call to source |
| map.cpp:86:7:86:32 | call to pair | map.cpp:86:24:86:29 | call to source |
| map.cpp:92:7:92:7 | call to pair | map.cpp:91:33:91:38 | call to source |
| map.cpp:165:7:165:27 | ... = ... | map.cpp:165:20:165:25 | call to source |
| map.cpp:167:7:167:30 | ... = ... | map.cpp:167:23:167:28 | call to source |
| map.cpp:317:7:317:27 | ... = ... | map.cpp:317:20:317:25 | call to source |

View File

@@ -17,6 +17,31 @@
| copyableclass.cpp:67:11:67:21 | copyableclass.cpp:67:13:67:18 | IR only |
| copyableclass_declonly.cpp:42:8:42:9 | copyableclass_declonly.cpp:34:30:34:35 | AST only |
| copyableclass_declonly.cpp:67:11:67:11 | copyableclass_declonly.cpp:67:13:67:18 | AST only |
| map.cpp:41:9:41:13 | map.cpp:40:30:40:35 | IR only |
| map.cpp:42:9:42:14 | map.cpp:40:30:40:35 | IR only |
| map.cpp:46:9:46:13 | map.cpp:45:37:45:42 | IR only |
| map.cpp:47:9:47:14 | map.cpp:45:37:45:42 | IR only |
| map.cpp:51:9:51:13 | map.cpp:45:37:45:42 | IR only |
| map.cpp:52:9:52:14 | map.cpp:45:37:45:42 | IR only |
| map.cpp:57:9:57:13 | map.cpp:45:37:45:42 | IR only |
| map.cpp:58:9:58:14 | map.cpp:45:37:45:42 | IR only |
| map.cpp:67:9:67:13 | map.cpp:62:37:62:42 | IR only |
| map.cpp:68:9:68:14 | map.cpp:62:37:62:42 | IR only |
| map.cpp:70:9:70:13 | map.cpp:62:37:62:42 | IR only |
| map.cpp:71:9:71:14 | map.cpp:62:37:62:42 | IR only |
| map.cpp:73:9:73:13 | map.cpp:63:37:63:42 | IR only |
| map.cpp:74:9:74:14 | map.cpp:63:37:63:42 | IR only |
| map.cpp:76:9:76:13 | map.cpp:63:37:63:42 | IR only |
| map.cpp:77:9:77:14 | map.cpp:63:37:63:42 | IR only |
| map.cpp:84:34:84:38 | map.cpp:84:17:84:22 | IR only |
| map.cpp:85:34:85:39 | map.cpp:85:17:85:22 | IR only |
| map.cpp:87:34:87:38 | map.cpp:87:24:87:29 | IR only |
| map.cpp:88:34:88:39 | map.cpp:88:24:88:29 | IR only |
| map.cpp:92:7:92:7 | map.cpp:91:33:91:38 | AST only |
| map.cpp:93:9:93:13 | map.cpp:91:33:91:38 | IR only |
| map.cpp:94:15:94:19 | map.cpp:91:33:91:38 | IR only |
| map.cpp:95:15:95:20 | map.cpp:91:33:91:38 | IR only |
| map.cpp:96:9:96:14 | map.cpp:91:33:91:38 | IR only |
| movableclass.cpp:65:11:65:11 | movableclass.cpp:65:13:65:18 | AST only |
| movableclass.cpp:65:11:65:21 | movableclass.cpp:65:13:65:18 | IR only |
| smart_pointer.cpp:12:10:12:10 | smart_pointer.cpp:11:52:11:57 | AST only |

View File

@@ -44,6 +44,40 @@
| format.cpp:158:7:158:27 | ... + ... | format.cpp:148:16:148:30 | call to source |
| map.cpp:26:9:26:13 | first | map.cpp:25:12:25:17 | call to source |
| map.cpp:32:9:32:14 | second | map.cpp:30:13:30:18 | call to source |
| map.cpp:41:9:41:13 | first | map.cpp:40:30:40:35 | call to source |
| map.cpp:42:9:42:14 | second | map.cpp:40:30:40:35 | call to source |
| map.cpp:43:7:43:7 | e | map.cpp:40:30:40:35 | call to source |
| map.cpp:46:9:46:13 | first | map.cpp:45:37:45:42 | call to source |
| map.cpp:47:9:47:14 | second | map.cpp:45:37:45:42 | call to source |
| map.cpp:48:7:48:7 | f | map.cpp:45:37:45:42 | call to source |
| map.cpp:51:9:51:13 | first | map.cpp:45:37:45:42 | call to source |
| map.cpp:52:9:52:14 | second | map.cpp:45:37:45:42 | call to source |
| map.cpp:53:7:53:7 | g | map.cpp:45:37:45:42 | call to source |
| map.cpp:57:9:57:13 | first | map.cpp:45:37:45:42 | call to source |
| map.cpp:58:9:58:14 | second | map.cpp:45:37:45:42 | call to source |
| map.cpp:59:7:59:7 | h | map.cpp:45:37:45:42 | call to source |
| map.cpp:67:9:67:13 | first | map.cpp:62:37:62:42 | call to source |
| map.cpp:68:9:68:14 | second | map.cpp:62:37:62:42 | call to source |
| map.cpp:69:7:69:7 | i | map.cpp:62:37:62:42 | call to source |
| map.cpp:70:9:70:13 | first | map.cpp:62:37:62:42 | call to source |
| map.cpp:71:9:71:14 | second | map.cpp:62:37:62:42 | call to source |
| map.cpp:72:7:72:7 | j | map.cpp:62:37:62:42 | call to source |
| map.cpp:73:9:73:13 | first | map.cpp:63:37:63:42 | call to source |
| map.cpp:74:9:74:14 | second | map.cpp:63:37:63:42 | call to source |
| map.cpp:75:7:75:7 | k | map.cpp:63:37:63:42 | call to source |
| map.cpp:76:9:76:13 | first | map.cpp:63:37:63:42 | call to source |
| map.cpp:77:9:77:14 | second | map.cpp:63:37:63:42 | call to source |
| map.cpp:78:7:78:7 | l | map.cpp:63:37:63:42 | call to source |
| map.cpp:83:7:83:32 | call to pair | map.cpp:83:17:83:22 | call to source |
| map.cpp:84:34:84:38 | first | map.cpp:84:17:84:22 | call to source |
| map.cpp:85:34:85:39 | second | map.cpp:85:17:85:22 | call to source |
| map.cpp:86:7:86:32 | call to pair | map.cpp:86:24:86:29 | call to source |
| map.cpp:87:34:87:38 | first | map.cpp:87:24:87:29 | call to source |
| map.cpp:88:34:88:39 | second | map.cpp:88:24:88:29 | call to source |
| map.cpp:93:9:93:13 | first | map.cpp:91:33:91:38 | call to source |
| map.cpp:94:15:94:19 | first | map.cpp:91:33:91:38 | call to source |
| map.cpp:95:15:95:20 | second | map.cpp:91:33:91:38 | call to source |
| map.cpp:96:9:96:14 | second | map.cpp:91:33:91:38 | call to source |
| map.cpp:165:7:165:27 | ... = ... | map.cpp:165:20:165:25 | call to source |
| map.cpp:167:7:167:30 | ... = ... | map.cpp:167:23:167:28 | call to source |
| map.cpp:317:7:317:27 | ... = ... | map.cpp:317:20:317:25 | call to source |