Skip to content

Commit bb08611

Browse files
authored
Merge pull request #20301 from MathiasVP/add-comptr-model
C++: Add `ComPtr` MaD models
2 parents ada0b37 + bebfe03 commit bb08611

File tree

5 files changed

+315
-0
lines changed

5 files changed

+315
-0
lines changed

cpp/ql/lib/ext/ComPtr.model.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/cpp-all
4+
extensible: summaryModel
5+
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
6+
- ["Microsoft::WRL", "ComPtr", True, "ComPtr<T>", "(T *)", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
7+
- ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(const ComPtr &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
8+
- ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(ComPtr &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
9+
- ["Microsoft::WRL", "ComPtr", True, "As", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
10+
- ["Microsoft::WRL", "ComPtr", True, "AsIID", "", "", "Argument[-1]", "Argument[*1]", "value", "manual"]
11+
- ["Microsoft::WRL", "ComPtr", True, "AsWeak", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
12+
- ["Microsoft::WRL", "ComPtr", True, "Attach", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
13+
- ["Microsoft::WRL", "ComPtr<T>", True, "CopyTo", "(T **)", "", "Argument[-1].Element[@]", "Argument[**@0]", "value", "manual"]
14+
- ["Microsoft::WRL", "ComPtr", True, "CopyTo<T>", "(T **)", "", "Argument[-1].Element[@]", "Argument[**@0]", "value", "manual"]
15+
- ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(REFIID,void **)", "", "Argument[-1].Element[@]", "Argument[**@1]", "value", "manual"]
16+
- ["Microsoft::WRL", "ComPtr", True, "Detach", "", "", "Argument[-1].Element[@]", "ReturnValue[*]", "value", "manual"]
17+
- ["Microsoft::WRL", "ComPtr", True, "Get", "", "", "Argument[-1].Element[@]", "ReturnValue[*]", "value", "manual"]
18+
- ["Microsoft::WRL", "ComPtr", True, "GetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**]", "value", "manual"]
19+
- ["Microsoft::WRL", "ComPtr", True, "ReleaseAndGetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**]", "value", "manual"]
20+
- ["Microsoft::WRL", "ComPtr", True, "Swap", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
21+
- ["Microsoft::WRL", "ComPtr", True, "Swap", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]

cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@
503503
| Dubious signature "(CURLU *,CURLUPart,const char *,unsigned int)" in summary model. |
504504
| Dubious signature "(CURLU *,const char *)" in summary model. |
505505
| Dubious signature "(CURLU *,const char *,char **,OperationConfig *)" in summary model. |
506+
| Dubious signature "(ComPtr &&)" in summary model. |
506507
| Dubious signature "(CompoundDictionary *,const PreparedDictionary *)" in summary model. |
507508
| Dubious signature "(Curl_cfilter *)" in summary model. |
508509
| Dubious signature "(Curl_cfilter **,Curl_easy *)" in summary model. |
@@ -2130,6 +2131,7 @@
21302131
| Dubious signature "(RAND_POOL *,unsigned char *)" in summary model. |
21312132
| Dubious signature "(RAND_POOL *,unsigned int)" in summary model. |
21322133
| Dubious signature "(RECORD_LAYER *,SSL_CONNECTION *)" in summary model. |
2134+
| Dubious signature "(REFIID,void **)" in summary model. |
21332135
| Dubious signature "(RIO_NOTIFIER *)" in summary model. |
21342136
| Dubious signature "(RIPEMD160_CTX *,const unsigned char *)" in summary model. |
21352137
| Dubious signature "(RIPEMD160_CTX *,const void *,size_t)" in summary model. |
@@ -2431,6 +2433,8 @@
24312433
| Dubious signature "(Strent *)" in summary model. |
24322434
| Dubious signature "(Strtab *,const char *,size_t)" in summary model. |
24332435
| Dubious signature "(Strtab *,size_t *)" in summary model. |
2436+
| Dubious signature "(T *)" in summary model. |
2437+
| Dubious signature "(T **)" in summary model. |
24342438
| Dubious signature "(TLS_FEATURE *)" in summary model. |
24352439
| Dubious signature "(TLS_RL_RECORD *,const unsigned char *)" in summary model. |
24362440
| Dubious signature "(TS_ACCURACY *)" in summary model. |
@@ -3155,6 +3159,7 @@
31553159
| Dubious signature "(const CT_POLICY_EVAL_CTX *)" in summary model. |
31563160
| Dubious signature "(const CURLU *)" in summary model. |
31573161
| Dubious signature "(const CURLU *,CURLUPart,char **,unsigned int)" in summary model. |
3162+
| Dubious signature "(const ComPtr &)" in summary model. |
31583163
| Dubious signature "(const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *)" in summary model. |
31593164
| Dubious signature "(const Curl_easy *,const connectdata *,int)" in summary model. |
31603165
| Dubious signature "(const DH *)" in summary model. |

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

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,4 +1241,140 @@ namespace ATL {
12411241
sink(static_cast<CStrBufT<char>::PCXSTR>(b)); // $ ir
12421242
sink(static_cast<CStrBufT<char>::PXSTR>(b)); // $ ir
12431243
}
1244+
}
1245+
1246+
namespace Microsoft {
1247+
namespace WRL {
1248+
template <typename T>
1249+
class ComPtr;
1250+
1251+
struct GUID;
1252+
1253+
typedef GUID IID;
1254+
1255+
typedef IID *REFIID;
1256+
1257+
class IUnknown;
1258+
1259+
class WeakRef;
1260+
1261+
template <typename T>
1262+
class ComPtr
1263+
{
1264+
public:
1265+
using InterfaceType = T;
1266+
1267+
ComPtr();
1268+
ComPtr(const ComPtr &);
1269+
ComPtr(ComPtr &&);
1270+
1271+
template <typename U>
1272+
ComPtr(U *);
1273+
1274+
~ComPtr();
1275+
1276+
template <typename U>
1277+
HRESULT As(ComPtr<U> *p) const;
1278+
1279+
HRESULT AsWeak(WeakRef *);
1280+
1281+
void Attach(InterfaceType *);
1282+
1283+
HRESULT CopyTo(InterfaceType **);
1284+
1285+
HRESULT CopyTo(REFIID, void **) const;
1286+
1287+
template <typename U>
1288+
HRESULT CopyTo(U **) const;
1289+
1290+
T *Detach();
1291+
1292+
T *Get() const;
1293+
1294+
T *const *GetAddressOf() const;
1295+
T **GetAddressOf();
1296+
1297+
T **ReleaseAndGetAddressOf();
1298+
1299+
unsigned long Reset();
1300+
1301+
void Swap(ComPtr &&r);
1302+
1303+
void Swap(ComPtr &r);
1304+
};
1305+
1306+
}
1307+
}
1308+
1309+
namespace std {
1310+
template<class T> T&& move(T& t) noexcept; // simplified signature
1311+
}
1312+
1313+
void test_constructor()
1314+
{
1315+
Microsoft::WRL::ComPtr<int> p0;
1316+
sink(*p0.Get()); // clean
1317+
1318+
int x = source<int>();
1319+
Microsoft::WRL::ComPtr<int> p1(new int(x));
1320+
sink(*p1.Get()); // $ ir MISSING: ast
1321+
sink(*p1.Detach()); // $ ir MISSING: ast
1322+
1323+
Microsoft::WRL::ComPtr<int> p2(p1);
1324+
sink(*p2.Get()); // $ ir MISSING: ast
1325+
1326+
Microsoft::WRL::ComPtr<int> p3(std::move(p1));
1327+
sink(*p3.Get()); // $ ir MISSING: ast
1328+
}
1329+
1330+
void test_As()
1331+
{
1332+
int x = source<int>();
1333+
Microsoft::WRL::ComPtr<int> p1(new int(x));
1334+
Microsoft::WRL::ComPtr<int> p2;
1335+
p1.As(&p2);
1336+
sink(*p2.Get()); // $ ir MISSING: ast
1337+
}
1338+
1339+
void test_CopyTo()
1340+
{
1341+
int x = source<int>();
1342+
Microsoft::WRL::ComPtr<int> p1(new int(x));
1343+
int *raw = nullptr;
1344+
p1.CopyTo(&raw);
1345+
sink(*raw); // $ ir MISSING: ast
1346+
1347+
Microsoft::WRL::ComPtr<int> p2;
1348+
p1.CopyTo(nullptr, (void**)&raw);
1349+
sink(*raw); // $ ir MISSING: ast
1350+
1351+
Microsoft::WRL::ComPtr<int> p3(new int(x));
1352+
1353+
int* raw2 = nullptr;
1354+
p3.CopyTo<int>(&raw2);
1355+
sink(*raw2); // $ ir MISSING: ast
1356+
}
1357+
1358+
void test_Swap()
1359+
{
1360+
int x = source<int>();
1361+
Microsoft::WRL::ComPtr<int> p1(new int(x));
1362+
Microsoft::WRL::ComPtr<int> p2;
1363+
p1.Swap(p2);
1364+
sink(*p2.Get()); // $ ir MISSING: ast
1365+
sink(*p1.Get()); // $ SPURIOUS: ir
1366+
}
1367+
1368+
void test_GetAddressOf()
1369+
{
1370+
int x = source<int>();
1371+
Microsoft::WRL::ComPtr<int> p1(new int(x));
1372+
sink(**p1.GetAddressOf()); // $ ir MISSING: ast
1373+
1374+
const Microsoft::WRL::ComPtr<int> p2(new int(x));
1375+
sink(**p2.GetAddressOf()); // $ ir MISSING: ast
1376+
1377+
Microsoft::WRL::ComPtr<int> p3(new int(x));
1378+
int **pp = p3.ReleaseAndGetAddressOf();
1379+
sink(**pp); // $ ir MISSING: ast
12441380
}

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

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,6 +1278,131 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future
12781278
| atl.cpp:1240:22:1240:30 | call to CStrBufT | atl.cpp:1241:46:1241:46 | b | |
12791279
| atl.cpp:1240:22:1240:30 | call to CStrBufT | atl.cpp:1242:45:1242:45 | b | |
12801280
| atl.cpp:1241:46:1241:46 | ref arg b | atl.cpp:1242:45:1242:45 | b | |
1281+
| atl.cpp:1315:31:1315:32 | call to ComPtr | atl.cpp:1316:9:1316:10 | p0 | |
1282+
| atl.cpp:1315:31:1315:32 | call to ComPtr | atl.cpp:1328:1:1328:1 | p0 | |
1283+
| atl.cpp:1316:9:1316:10 | ref arg p0 | atl.cpp:1328:1:1328:1 | p0 | |
1284+
| atl.cpp:1316:12:1316:14 | call to Get | atl.cpp:1316:8:1316:16 | * ... | TAINT |
1285+
| atl.cpp:1318:11:1318:21 | call to source | atl.cpp:1319:42:1319:42 | x | |
1286+
| atl.cpp:1319:34:1319:43 | new | atl.cpp:1319:34:1319:44 | call to ComPtr | TAINT |
1287+
| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1320:9:1320:10 | p1 | |
1288+
| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1321:9:1321:10 | p1 | |
1289+
| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1323:34:1323:35 | p1 | |
1290+
| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1326:44:1326:45 | p1 | |
1291+
| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1328:1:1328:1 | p1 | |
1292+
| atl.cpp:1319:42:1319:42 | x | atl.cpp:1319:34:1319:43 | new | |
1293+
| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1321:9:1321:10 | p1 | |
1294+
| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1323:34:1323:35 | p1 | |
1295+
| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1326:44:1326:45 | p1 | |
1296+
| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1328:1:1328:1 | p1 | |
1297+
| atl.cpp:1320:12:1320:14 | call to Get | atl.cpp:1320:8:1320:16 | * ... | TAINT |
1298+
| atl.cpp:1321:9:1321:10 | ref arg p1 | atl.cpp:1323:34:1323:35 | p1 | |
1299+
| atl.cpp:1321:9:1321:10 | ref arg p1 | atl.cpp:1326:44:1326:45 | p1 | |
1300+
| atl.cpp:1321:9:1321:10 | ref arg p1 | atl.cpp:1328:1:1328:1 | p1 | |
1301+
| atl.cpp:1321:12:1321:17 | call to Detach | atl.cpp:1321:8:1321:19 | * ... | TAINT |
1302+
| atl.cpp:1323:34:1323:35 | p1 | atl.cpp:1323:34:1323:36 | call to ComPtr | |
1303+
| atl.cpp:1323:34:1323:36 | call to ComPtr | atl.cpp:1324:9:1324:10 | p2 | |
1304+
| atl.cpp:1323:34:1323:36 | call to ComPtr | atl.cpp:1328:1:1328:1 | p2 | |
1305+
| atl.cpp:1324:9:1324:10 | ref arg p2 | atl.cpp:1328:1:1328:1 | p2 | |
1306+
| atl.cpp:1324:12:1324:14 | call to Get | atl.cpp:1324:8:1324:16 | * ... | TAINT |
1307+
| atl.cpp:1326:34:1326:42 | call to move | atl.cpp:1326:34:1326:47 | call to ComPtr | TAINT |
1308+
| atl.cpp:1326:34:1326:42 | ref arg call to move | atl.cpp:1326:44:1326:45 | p1 [inner post update] | |
1309+
| atl.cpp:1326:34:1326:42 | ref arg call to move | atl.cpp:1328:1:1328:1 | p1 | |
1310+
| atl.cpp:1326:34:1326:47 | call to ComPtr | atl.cpp:1327:9:1327:10 | p3 | |
1311+
| atl.cpp:1326:34:1326:47 | call to ComPtr | atl.cpp:1328:1:1328:1 | p3 | |
1312+
| atl.cpp:1326:44:1326:45 | p1 | atl.cpp:1326:34:1326:42 | call to move | TAINT |
1313+
| atl.cpp:1326:44:1326:45 | p1 | atl.cpp:1326:34:1326:47 | call to ComPtr | |
1314+
| atl.cpp:1327:9:1327:10 | ref arg p3 | atl.cpp:1328:1:1328:1 | p3 | |
1315+
| atl.cpp:1327:12:1327:14 | call to Get | atl.cpp:1327:8:1327:16 | * ... | TAINT |
1316+
| atl.cpp:1332:11:1332:21 | call to source | atl.cpp:1333:42:1333:42 | x | |
1317+
| atl.cpp:1333:34:1333:43 | new | atl.cpp:1333:34:1333:44 | call to ComPtr | TAINT |
1318+
| atl.cpp:1333:34:1333:44 | call to ComPtr | atl.cpp:1335:3:1335:4 | p1 | |
1319+
| atl.cpp:1333:34:1333:44 | call to ComPtr | atl.cpp:1337:1:1337:1 | p1 | |
1320+
| atl.cpp:1333:42:1333:42 | x | atl.cpp:1333:34:1333:43 | new | |
1321+
| atl.cpp:1334:31:1334:32 | call to ComPtr | atl.cpp:1335:10:1335:11 | p2 | |
1322+
| atl.cpp:1334:31:1334:32 | call to ComPtr | atl.cpp:1336:9:1336:10 | p2 | |
1323+
| atl.cpp:1334:31:1334:32 | call to ComPtr | atl.cpp:1337:1:1337:1 | p2 | |
1324+
| atl.cpp:1335:9:1335:11 | ref arg & ... | atl.cpp:1335:10:1335:11 | p2 [inner post update] | |
1325+
| atl.cpp:1335:9:1335:11 | ref arg & ... | atl.cpp:1336:9:1336:10 | p2 | |
1326+
| atl.cpp:1335:9:1335:11 | ref arg & ... | atl.cpp:1337:1:1337:1 | p2 | |
1327+
| atl.cpp:1335:10:1335:11 | p2 | atl.cpp:1335:9:1335:11 | & ... | |
1328+
| atl.cpp:1336:9:1336:10 | ref arg p2 | atl.cpp:1337:1:1337:1 | p2 | |
1329+
| atl.cpp:1336:12:1336:14 | call to Get | atl.cpp:1336:8:1336:16 | * ... | TAINT |
1330+
| atl.cpp:1341:11:1341:21 | call to source | atl.cpp:1342:42:1342:42 | x | |
1331+
| atl.cpp:1341:11:1341:21 | call to source | atl.cpp:1351:42:1351:42 | x | |
1332+
| atl.cpp:1342:34:1342:43 | new | atl.cpp:1342:34:1342:44 | call to ComPtr | TAINT |
1333+
| atl.cpp:1342:34:1342:44 | call to ComPtr | atl.cpp:1344:3:1344:4 | p1 | |
1334+
| atl.cpp:1342:34:1342:44 | call to ComPtr | atl.cpp:1348:3:1348:4 | p1 | |
1335+
| atl.cpp:1342:34:1342:44 | call to ComPtr | atl.cpp:1356:1:1356:1 | p1 | |
1336+
| atl.cpp:1342:42:1342:42 | x | atl.cpp:1342:34:1342:43 | new | |
1337+
| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1344:14:1344:16 | raw | |
1338+
| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1345:9:1345:11 | raw | |
1339+
| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1348:31:1348:33 | raw | |
1340+
| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1349:9:1349:11 | raw | |
1341+
| atl.cpp:1344:3:1344:4 | ref arg p1 | atl.cpp:1348:3:1348:4 | p1 | |
1342+
| atl.cpp:1344:3:1344:4 | ref arg p1 | atl.cpp:1356:1:1356:1 | p1 | |
1343+
| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1344:14:1344:16 | raw [inner post update] | |
1344+
| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1345:9:1345:11 | raw | |
1345+
| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1348:31:1348:33 | raw | |
1346+
| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1349:9:1349:11 | raw | |
1347+
| atl.cpp:1344:14:1344:16 | raw | atl.cpp:1344:13:1344:16 | & ... | |
1348+
| atl.cpp:1345:9:1345:11 | raw | atl.cpp:1345:8:1345:11 | * ... | TAINT |
1349+
| atl.cpp:1347:31:1347:32 | call to ComPtr | atl.cpp:1356:1:1356:1 | p2 | |
1350+
| atl.cpp:1348:30:1348:33 | ref arg & ... | atl.cpp:1348:31:1348:33 | raw [inner post update] | |
1351+
| atl.cpp:1348:30:1348:33 | ref arg & ... | atl.cpp:1349:9:1349:11 | raw | |
1352+
| atl.cpp:1348:31:1348:33 | raw | atl.cpp:1348:30:1348:33 | & ... | |
1353+
| atl.cpp:1349:9:1349:11 | raw | atl.cpp:1349:8:1349:11 | * ... | TAINT |
1354+
| atl.cpp:1351:34:1351:43 | new | atl.cpp:1351:34:1351:44 | call to ComPtr | TAINT |
1355+
| atl.cpp:1351:34:1351:44 | call to ComPtr | atl.cpp:1354:3:1354:4 | p3 | |
1356+
| atl.cpp:1351:34:1351:44 | call to ComPtr | atl.cpp:1356:1:1356:1 | p3 | |
1357+
| atl.cpp:1351:42:1351:42 | x | atl.cpp:1351:34:1351:43 | new | |
1358+
| atl.cpp:1353:15:1353:21 | 0 | atl.cpp:1354:19:1354:22 | raw2 | |
1359+
| atl.cpp:1353:15:1353:21 | 0 | atl.cpp:1355:9:1355:12 | raw2 | |
1360+
| atl.cpp:1354:18:1354:22 | ref arg & ... | atl.cpp:1354:19:1354:22 | raw2 [inner post update] | |
1361+
| atl.cpp:1354:18:1354:22 | ref arg & ... | atl.cpp:1355:9:1355:12 | raw2 | |
1362+
| atl.cpp:1354:19:1354:22 | raw2 | atl.cpp:1354:18:1354:22 | & ... | |
1363+
| atl.cpp:1355:9:1355:12 | raw2 | atl.cpp:1355:8:1355:12 | * ... | TAINT |
1364+
| atl.cpp:1360:11:1360:21 | call to source | atl.cpp:1361:42:1361:42 | x | |
1365+
| atl.cpp:1361:34:1361:43 | new | atl.cpp:1361:34:1361:44 | call to ComPtr | TAINT |
1366+
| atl.cpp:1361:34:1361:44 | call to ComPtr | atl.cpp:1363:3:1363:4 | p1 | |
1367+
| atl.cpp:1361:34:1361:44 | call to ComPtr | atl.cpp:1365:9:1365:10 | p1 | |
1368+
| atl.cpp:1361:34:1361:44 | call to ComPtr | atl.cpp:1366:1:1366:1 | p1 | |
1369+
| atl.cpp:1361:42:1361:42 | x | atl.cpp:1361:34:1361:43 | new | |
1370+
| atl.cpp:1362:31:1362:32 | call to ComPtr | atl.cpp:1363:11:1363:12 | p2 | |
1371+
| atl.cpp:1362:31:1362:32 | call to ComPtr | atl.cpp:1364:9:1364:10 | p2 | |
1372+
| atl.cpp:1362:31:1362:32 | call to ComPtr | atl.cpp:1366:1:1366:1 | p2 | |
1373+
| atl.cpp:1363:3:1363:4 | ref arg p1 | atl.cpp:1365:9:1365:10 | p1 | |
1374+
| atl.cpp:1363:3:1363:4 | ref arg p1 | atl.cpp:1366:1:1366:1 | p1 | |
1375+
| atl.cpp:1363:11:1363:12 | ref arg p2 | atl.cpp:1364:9:1364:10 | p2 | |
1376+
| atl.cpp:1363:11:1363:12 | ref arg p2 | atl.cpp:1366:1:1366:1 | p2 | |
1377+
| atl.cpp:1364:9:1364:10 | ref arg p2 | atl.cpp:1366:1:1366:1 | p2 | |
1378+
| atl.cpp:1364:12:1364:14 | call to Get | atl.cpp:1364:8:1364:16 | * ... | TAINT |
1379+
| atl.cpp:1365:9:1365:10 | ref arg p1 | atl.cpp:1366:1:1366:1 | p1 | |
1380+
| atl.cpp:1365:12:1365:14 | call to Get | atl.cpp:1365:8:1365:16 | * ... | TAINT |
1381+
| atl.cpp:1370:11:1370:21 | call to source | atl.cpp:1371:42:1371:42 | x | |
1382+
| atl.cpp:1370:11:1370:21 | call to source | atl.cpp:1374:48:1374:48 | x | |
1383+
| atl.cpp:1370:11:1370:21 | call to source | atl.cpp:1377:42:1377:42 | x | |
1384+
| atl.cpp:1371:34:1371:43 | new | atl.cpp:1371:34:1371:44 | call to ComPtr | TAINT |
1385+
| atl.cpp:1371:34:1371:44 | call to ComPtr | atl.cpp:1372:10:1372:11 | p1 | |
1386+
| atl.cpp:1371:34:1371:44 | call to ComPtr | atl.cpp:1380:1:1380:1 | p1 | |
1387+
| atl.cpp:1371:42:1371:42 | x | atl.cpp:1371:34:1371:43 | new | |
1388+
| atl.cpp:1372:9:1372:26 | * ... | atl.cpp:1372:8:1372:26 | * ... | TAINT |
1389+
| atl.cpp:1372:10:1372:11 | ref arg p1 | atl.cpp:1380:1:1380:1 | p1 | |
1390+
| atl.cpp:1372:13:1372:24 | call to GetAddressOf | atl.cpp:1372:9:1372:26 | * ... | TAINT |
1391+
| atl.cpp:1374:40:1374:49 | new | atl.cpp:1374:40:1374:50 | call to ComPtr | TAINT |
1392+
| atl.cpp:1374:40:1374:50 | call to ComPtr | atl.cpp:1375:10:1375:11 | p2 | |
1393+
| atl.cpp:1374:40:1374:50 | call to ComPtr | atl.cpp:1380:1:1380:1 | p2 | |
1394+
| atl.cpp:1374:48:1374:48 | x | atl.cpp:1374:40:1374:49 | new | |
1395+
| atl.cpp:1375:9:1375:26 | * ... | atl.cpp:1375:8:1375:26 | * ... | TAINT |
1396+
| atl.cpp:1375:10:1375:11 | ref arg p2 | atl.cpp:1380:1:1380:1 | p2 | |
1397+
| atl.cpp:1375:13:1375:24 | call to GetAddressOf | atl.cpp:1375:9:1375:26 | * ... | TAINT |
1398+
| atl.cpp:1377:34:1377:43 | new | atl.cpp:1377:34:1377:44 | call to ComPtr | TAINT |
1399+
| atl.cpp:1377:34:1377:44 | call to ComPtr | atl.cpp:1378:14:1378:15 | p3 | |
1400+
| atl.cpp:1377:34:1377:44 | call to ComPtr | atl.cpp:1380:1:1380:1 | p3 | |
1401+
| atl.cpp:1377:42:1377:42 | x | atl.cpp:1377:34:1377:43 | new | |
1402+
| atl.cpp:1378:14:1378:15 | ref arg p3 | atl.cpp:1380:1:1380:1 | p3 | |
1403+
| atl.cpp:1378:17:1378:38 | call to ReleaseAndGetAddressOf | atl.cpp:1379:10:1379:11 | pp | |
1404+
| atl.cpp:1379:9:1379:11 | * ... | atl.cpp:1379:8:1379:11 | * ... | TAINT |
1405+
| atl.cpp:1379:10:1379:11 | pp | atl.cpp:1379:9:1379:11 | * ... | TAINT |
12811406
| bsd.cpp:17:11:17:16 | call to source | bsd.cpp:20:18:20:18 | s | |
12821407
| bsd.cpp:18:12:18:15 | addr | bsd.cpp:20:22:20:25 | addr | |
12831408
| bsd.cpp:18:12:18:15 | addr | bsd.cpp:23:8:23:11 | addr | |

0 commit comments

Comments
 (0)