File tree Expand file tree Collapse file tree 5 files changed +36
-2
lines changed
src/semmle/code/cpp/models/implementations
test/library-tests/dataflow/taint-tests Expand file tree Collapse file tree 5 files changed +36
-2
lines changed Original file line number Diff line number Diff line change @@ -87,3 +87,19 @@ class StdMapFind extends TaintFunction {
8787 output .isReturnValue ( )
8888 }
8989}
90+
91+ /**
92+ * The standard map `erase` function.
93+ */
94+ class StdMapErase extends TaintFunction {
95+ StdMapErase ( ) {
96+ this .hasQualifiedName ( "std" , [ "map" , "unordered_map" ] , "erase" )
97+ }
98+
99+ override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
100+ // flow from qualifier to iterator return value
101+ getType ( ) .getUnderlyingType ( ) instanceof Iterator and
102+ input .isQualifierObject ( ) and
103+ output .isReturnValue ( )
104+ }
105+ }
Original file line number Diff line number Diff line change 11231123| map.cpp:221:39:221:44 | call to source | map.cpp:221:13:221:57 | call to pair | TAINT |
11241124| map.cpp:221:49:221:54 | call to source | map.cpp:221:13:221:57 | call to pair | TAINT |
11251125| map.cpp:222:7:222:9 | m23 | map.cpp:222:7:222:9 | call to map | |
1126+ | map.cpp:223:7:223:9 | m23 | map.cpp:223:11:223:15 | call to erase | TAINT |
11261127| map.cpp:223:7:223:9 | ref arg m23 | map.cpp:224:7:224:9 | m23 | |
11271128| map.cpp:223:7:223:9 | ref arg m23 | map.cpp:225:2:225:4 | m23 | |
11281129| map.cpp:223:7:223:9 | ref arg m23 | map.cpp:226:7:226:9 | m23 | |
17541755| map.cpp:370:39:370:44 | call to source | map.cpp:370:13:370:57 | call to pair | TAINT |
17551756| map.cpp:370:49:370:54 | call to source | map.cpp:370:13:370:57 | call to pair | TAINT |
17561757| map.cpp:371:7:371:9 | m23 | map.cpp:371:7:371:9 | call to unordered_map | |
1758+ | map.cpp:372:7:372:9 | m23 | map.cpp:372:11:372:15 | call to erase | TAINT |
17571759| map.cpp:372:7:372:9 | ref arg m23 | map.cpp:373:7:373:9 | m23 | |
17581760| map.cpp:372:7:372:9 | ref arg m23 | map.cpp:374:2:374:4 | m23 | |
17591761| map.cpp:372:7:372:9 | ref arg m23 | map.cpp:375:7:375:9 | m23 | |
Original file line number Diff line number Diff line change @@ -220,7 +220,7 @@ void test_map()
220220 m23.insert (std::pair<char *, char *>(source (), source ()));
221221 m23.insert (std::pair<char *, char *>(source (), source ()));
222222 sink (m23); // tainted
223- sink (m23.erase (m23.begin ())); // tainted [NOT DETECTED]
223+ sink (m23.erase (m23.begin ())); // tainted
224224 sink (m23); // tainted
225225 m23.clear ();
226226 sink (m23); // [FALSE POSITIVE]
@@ -369,7 +369,7 @@ void test_unordered_map()
369369 m23.insert (std::pair<char *, char *>(source (), source ()));
370370 m23.insert (std::pair<char *, char *>(source (), source ()));
371371 sink (m23); // tainted
372- sink (m23.erase (m23.begin ())); // tainted [NOT DETECTED]
372+ sink (m23.erase (m23.begin ())); // tainted
373373 sink (m23); // tainted
374374 m23.clear ();
375375 sink (m23); // [FALSE POSITIVE]
Original file line number Diff line number Diff line change 9999| map.cpp:222:7:222:9 | call to map | map.cpp:220:49:220:54 | call to source |
100100| map.cpp:222:7:222:9 | call to map | map.cpp:221:39:221:44 | call to source |
101101| map.cpp:222:7:222:9 | call to map | map.cpp:221:49:221:54 | call to source |
102+ | map.cpp:223:11:223:15 | call to erase | map.cpp:220:39:220:44 | call to source |
103+ | map.cpp:223:11:223:15 | call to erase | map.cpp:220:49:220:54 | call to source |
104+ | map.cpp:223:11:223:15 | call to erase | map.cpp:221:39:221:44 | call to source |
105+ | map.cpp:223:11:223:15 | call to erase | map.cpp:221:49:221:54 | call to source |
102106| map.cpp:224:7:224:9 | call to map | map.cpp:220:39:220:44 | call to source |
103107| map.cpp:224:7:224:9 | call to map | map.cpp:220:49:220:54 | call to source |
104108| map.cpp:224:7:224:9 | call to map | map.cpp:221:39:221:44 | call to source |
160164| map.cpp:371:7:371:9 | call to unordered_map | map.cpp:369:49:369:54 | call to source |
161165| map.cpp:371:7:371:9 | call to unordered_map | map.cpp:370:39:370:44 | call to source |
162166| map.cpp:371:7:371:9 | call to unordered_map | map.cpp:370:49:370:54 | call to source |
167+ | map.cpp:372:11:372:15 | call to erase | map.cpp:369:39:369:44 | call to source |
168+ | map.cpp:372:11:372:15 | call to erase | map.cpp:369:49:369:54 | call to source |
169+ | map.cpp:372:11:372:15 | call to erase | map.cpp:370:39:370:44 | call to source |
170+ | map.cpp:372:11:372:15 | call to erase | map.cpp:370:49:370:54 | call to source |
163171| map.cpp:373:7:373:9 | call to unordered_map | map.cpp:369:39:369:44 | call to source |
164172| map.cpp:373:7:373:9 | call to unordered_map | map.cpp:369:49:369:54 | call to source |
165173| map.cpp:373:7:373:9 | call to unordered_map | map.cpp:370:39:370:44 | call to source |
Original file line number Diff line number Diff line change 9898| map.cpp:159:12:159:17 | second | map.cpp:105:39:105:44 | call to source |
9999| map.cpp:165:7:165:27 | ... = ... | map.cpp:165:20:165:25 | call to source |
100100| map.cpp:167:7:167:30 | ... = ... | map.cpp:167:23:167:28 | call to source |
101+ | map.cpp:223:11:223:15 | call to erase | map.cpp:220:39:220:44 | call to source |
102+ | map.cpp:223:11:223:15 | call to erase | map.cpp:220:49:220:54 | call to source |
103+ | map.cpp:223:11:223:15 | call to erase | map.cpp:221:39:221:44 | call to source |
104+ | map.cpp:223:11:223:15 | call to erase | map.cpp:221:49:221:54 | call to source |
101105| map.cpp:257:7:257:54 | call to iterator | map.cpp:257:39:257:44 | call to source |
102106| map.cpp:258:7:258:54 | call to iterator | map.cpp:258:32:258:37 | call to source |
103107| map.cpp:259:10:259:15 | call to insert | map.cpp:259:62:259:67 | call to source |
118122| map.cpp:311:12:311:17 | second | map.cpp:257:39:257:44 | call to source |
119123| map.cpp:317:7:317:27 | ... = ... | map.cpp:317:20:317:25 | call to source |
120124| map.cpp:319:7:319:30 | ... = ... | map.cpp:319:23:319:28 | call to source |
125+ | map.cpp:372:11:372:15 | call to erase | map.cpp:369:39:369:44 | call to source |
126+ | map.cpp:372:11:372:15 | call to erase | map.cpp:369:49:369:54 | call to source |
127+ | map.cpp:372:11:372:15 | call to erase | map.cpp:370:39:370:44 | call to source |
128+ | map.cpp:372:11:372:15 | call to erase | map.cpp:370:49:370:54 | call to source |
121129| movableclass.cpp:44:8:44:9 | s1 | movableclass.cpp:39:21:39:26 | call to source |
122130| movableclass.cpp:45:8:45:9 | s2 | movableclass.cpp:40:23:40:28 | call to source |
123131| movableclass.cpp:46:8:46:9 | s3 | movableclass.cpp:42:8:42:13 | call to source |
You can’t perform that action at this time.
0 commit comments