Skip to content

Commit c1ee56e

Browse files
committed
C++: Add ReadFileEx tests with missing flow.
1 parent 8595bd8 commit c1ee56e

File tree

3 files changed

+109
-68
lines changed

3 files changed

+109
-68
lines changed

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

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -48,30 +48,30 @@ edges
4848
| windows.cpp:23:17:23:38 | *call to GetEnvironmentStringsA | windows.cpp:23:17:23:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:327 |
4949
| windows.cpp:23:17:23:38 | *call to GetEnvironmentStringsA | windows.cpp:25:10:25:13 | * ... | provenance | |
5050
| windows.cpp:28:36:28:38 | GetEnvironmentVariableA output argument | windows.cpp:30:10:30:13 | * ... | provenance | Src:MaD:329 |
51-
| windows.cpp:145:35:145:40 | ReadFile output argument | windows.cpp:147:10:147:16 | * ... | provenance | Src:MaD:331 |
52-
| windows.cpp:154:23:154:28 | ReadFileEx output argument | windows.cpp:156:10:156:16 | * ... | provenance | Src:MaD:332 |
53-
| windows.cpp:168:84:168:89 | NtReadFile output argument | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:340 |
54-
| windows.cpp:245:23:245:35 | *call to MapViewOfFile | windows.cpp:245:23:245:35 | *call to MapViewOfFile | provenance | Src:MaD:333 |
55-
| windows.cpp:245:23:245:35 | *call to MapViewOfFile | windows.cpp:246:20:246:52 | *pMapView | provenance | |
56-
| windows.cpp:246:20:246:52 | *pMapView | windows.cpp:248:10:248:16 | * ... | provenance | |
57-
| windows.cpp:252:23:252:36 | *call to MapViewOfFile2 | windows.cpp:252:23:252:36 | *call to MapViewOfFile2 | provenance | Src:MaD:334 |
58-
| windows.cpp:252:23:252:36 | *call to MapViewOfFile2 | windows.cpp:253:20:253:52 | *pMapView | provenance | |
59-
| windows.cpp:253:20:253:52 | *pMapView | windows.cpp:255:10:255:16 | * ... | provenance | |
60-
| windows.cpp:261:23:261:36 | *call to MapViewOfFile3 | windows.cpp:261:23:261:36 | *call to MapViewOfFile3 | provenance | Src:MaD:335 |
61-
| windows.cpp:261:23:261:36 | *call to MapViewOfFile3 | windows.cpp:262:20:262:52 | *pMapView | provenance | |
62-
| windows.cpp:262:20:262:52 | *pMapView | windows.cpp:264:10:264:16 | * ... | provenance | |
63-
| windows.cpp:270:23:270:43 | *call to MapViewOfFile3FromApp | windows.cpp:270:23:270:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:336 |
64-
| windows.cpp:270:23:270:43 | *call to MapViewOfFile3FromApp | windows.cpp:271:20:271:52 | *pMapView | provenance | |
65-
| windows.cpp:271:20:271:52 | *pMapView | windows.cpp:273:10:273:16 | * ... | provenance | |
66-
| windows.cpp:277:23:277:37 | *call to MapViewOfFileEx | windows.cpp:277:23:277:37 | *call to MapViewOfFileEx | provenance | Src:MaD:337 |
67-
| windows.cpp:277:23:277:37 | *call to MapViewOfFileEx | windows.cpp:278:20:278:52 | *pMapView | provenance | |
68-
| windows.cpp:278:20:278:52 | *pMapView | windows.cpp:280:10:280:16 | * ... | provenance | |
69-
| windows.cpp:284:23:284:42 | *call to MapViewOfFileFromApp | windows.cpp:284:23:284:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:338 |
70-
| windows.cpp:284:23:284:42 | *call to MapViewOfFileFromApp | windows.cpp:285:20:285:52 | *pMapView | provenance | |
71-
| windows.cpp:285:20:285:52 | *pMapView | windows.cpp:287:10:287:16 | * ... | provenance | |
72-
| windows.cpp:291:23:291:40 | *call to MapViewOfFileNuma2 | windows.cpp:291:23:291:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:339 |
73-
| windows.cpp:291:23:291:40 | *call to MapViewOfFileNuma2 | windows.cpp:292:20:292:52 | *pMapView | provenance | |
74-
| windows.cpp:292:20:292:52 | *pMapView | windows.cpp:294:10:294:16 | * ... | provenance | |
51+
| windows.cpp:164:35:164:40 | ReadFile output argument | windows.cpp:166:10:166:16 | * ... | provenance | Src:MaD:331 |
52+
| windows.cpp:173:23:173:28 | ReadFileEx output argument | windows.cpp:175:10:175:16 | * ... | provenance | Src:MaD:332 |
53+
| windows.cpp:205:84:205:89 | NtReadFile output argument | windows.cpp:207:10:207:16 | * ... | provenance | Src:MaD:340 |
54+
| windows.cpp:282:23:282:35 | *call to MapViewOfFile | windows.cpp:282:23:282:35 | *call to MapViewOfFile | provenance | Src:MaD:333 |
55+
| windows.cpp:282:23:282:35 | *call to MapViewOfFile | windows.cpp:283:20:283:52 | *pMapView | provenance | |
56+
| windows.cpp:283:20:283:52 | *pMapView | windows.cpp:285:10:285:16 | * ... | provenance | |
57+
| windows.cpp:289:23:289:36 | *call to MapViewOfFile2 | windows.cpp:289:23:289:36 | *call to MapViewOfFile2 | provenance | Src:MaD:334 |
58+
| windows.cpp:289:23:289:36 | *call to MapViewOfFile2 | windows.cpp:290:20:290:52 | *pMapView | provenance | |
59+
| windows.cpp:290:20:290:52 | *pMapView | windows.cpp:292:10:292:16 | * ... | provenance | |
60+
| windows.cpp:298:23:298:36 | *call to MapViewOfFile3 | windows.cpp:298:23:298:36 | *call to MapViewOfFile3 | provenance | Src:MaD:335 |
61+
| windows.cpp:298:23:298:36 | *call to MapViewOfFile3 | windows.cpp:299:20:299:52 | *pMapView | provenance | |
62+
| windows.cpp:299:20:299:52 | *pMapView | windows.cpp:301:10:301:16 | * ... | provenance | |
63+
| windows.cpp:307:23:307:43 | *call to MapViewOfFile3FromApp | windows.cpp:307:23:307:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:336 |
64+
| windows.cpp:307:23:307:43 | *call to MapViewOfFile3FromApp | windows.cpp:308:20:308:52 | *pMapView | provenance | |
65+
| windows.cpp:308:20:308:52 | *pMapView | windows.cpp:310:10:310:16 | * ... | provenance | |
66+
| windows.cpp:314:23:314:37 | *call to MapViewOfFileEx | windows.cpp:314:23:314:37 | *call to MapViewOfFileEx | provenance | Src:MaD:337 |
67+
| windows.cpp:314:23:314:37 | *call to MapViewOfFileEx | windows.cpp:315:20:315:52 | *pMapView | provenance | |
68+
| windows.cpp:315:20:315:52 | *pMapView | windows.cpp:317:10:317:16 | * ... | provenance | |
69+
| windows.cpp:321:23:321:42 | *call to MapViewOfFileFromApp | windows.cpp:321:23:321:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:338 |
70+
| windows.cpp:321:23:321:42 | *call to MapViewOfFileFromApp | windows.cpp:322:20:322:52 | *pMapView | provenance | |
71+
| windows.cpp:322:20:322:52 | *pMapView | windows.cpp:324:10:324:16 | * ... | provenance | |
72+
| windows.cpp:328:23:328:40 | *call to MapViewOfFileNuma2 | windows.cpp:328:23:328:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:339 |
73+
| windows.cpp:328:23:328:40 | *call to MapViewOfFileNuma2 | windows.cpp:329:20:329:52 | *pMapView | provenance | |
74+
| windows.cpp:329:20:329:52 | *pMapView | windows.cpp:331:10:331:16 | * ... | provenance | |
7575
nodes
7676
| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | semmle.label | [summary param] *0 in buffer |
7777
| asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | semmle.label | [summary] to write: ReturnValue in buffer |
@@ -127,40 +127,40 @@ nodes
127127
| windows.cpp:25:10:25:13 | * ... | semmle.label | * ... |
128128
| windows.cpp:28:36:28:38 | GetEnvironmentVariableA output argument | semmle.label | GetEnvironmentVariableA output argument |
129129
| windows.cpp:30:10:30:13 | * ... | semmle.label | * ... |
130-
| windows.cpp:145:35:145:40 | ReadFile output argument | semmle.label | ReadFile output argument |
131-
| windows.cpp:147:10:147:16 | * ... | semmle.label | * ... |
132-
| windows.cpp:154:23:154:28 | ReadFileEx output argument | semmle.label | ReadFileEx output argument |
133-
| windows.cpp:156:10:156:16 | * ... | semmle.label | * ... |
134-
| windows.cpp:168:84:168:89 | NtReadFile output argument | semmle.label | NtReadFile output argument |
135-
| windows.cpp:170:10:170:16 | * ... | semmle.label | * ... |
136-
| windows.cpp:245:23:245:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile |
137-
| windows.cpp:245:23:245:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile |
138-
| windows.cpp:246:20:246:52 | *pMapView | semmle.label | *pMapView |
139-
| windows.cpp:248:10:248:16 | * ... | semmle.label | * ... |
140-
| windows.cpp:252:23:252:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 |
141-
| windows.cpp:252:23:252:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 |
142-
| windows.cpp:253:20:253:52 | *pMapView | semmle.label | *pMapView |
143-
| windows.cpp:255:10:255:16 | * ... | semmle.label | * ... |
144-
| windows.cpp:261:23:261:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 |
145-
| windows.cpp:261:23:261:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 |
146-
| windows.cpp:262:20:262:52 | *pMapView | semmle.label | *pMapView |
147-
| windows.cpp:264:10:264:16 | * ... | semmle.label | * ... |
148-
| windows.cpp:270:23:270:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp |
149-
| windows.cpp:270:23:270:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp |
150-
| windows.cpp:271:20:271:52 | *pMapView | semmle.label | *pMapView |
151-
| windows.cpp:273:10:273:16 | * ... | semmle.label | * ... |
152-
| windows.cpp:277:23:277:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx |
153-
| windows.cpp:277:23:277:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx |
154-
| windows.cpp:278:20:278:52 | *pMapView | semmle.label | *pMapView |
155-
| windows.cpp:280:10:280:16 | * ... | semmle.label | * ... |
156-
| windows.cpp:284:23:284:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp |
157-
| windows.cpp:284:23:284:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp |
158-
| windows.cpp:285:20:285:52 | *pMapView | semmle.label | *pMapView |
159-
| windows.cpp:287:10:287:16 | * ... | semmle.label | * ... |
160-
| windows.cpp:291:23:291:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 |
161-
| windows.cpp:291:23:291:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 |
162-
| windows.cpp:292:20:292:52 | *pMapView | semmle.label | *pMapView |
163-
| windows.cpp:294:10:294:16 | * ... | semmle.label | * ... |
130+
| windows.cpp:164:35:164:40 | ReadFile output argument | semmle.label | ReadFile output argument |
131+
| windows.cpp:166:10:166:16 | * ... | semmle.label | * ... |
132+
| windows.cpp:173:23:173:28 | ReadFileEx output argument | semmle.label | ReadFileEx output argument |
133+
| windows.cpp:175:10:175:16 | * ... | semmle.label | * ... |
134+
| windows.cpp:205:84:205:89 | NtReadFile output argument | semmle.label | NtReadFile output argument |
135+
| windows.cpp:207:10:207:16 | * ... | semmle.label | * ... |
136+
| windows.cpp:282:23:282:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile |
137+
| windows.cpp:282:23:282:35 | *call to MapViewOfFile | semmle.label | *call to MapViewOfFile |
138+
| windows.cpp:283:20:283:52 | *pMapView | semmle.label | *pMapView |
139+
| windows.cpp:285:10:285:16 | * ... | semmle.label | * ... |
140+
| windows.cpp:289:23:289:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 |
141+
| windows.cpp:289:23:289:36 | *call to MapViewOfFile2 | semmle.label | *call to MapViewOfFile2 |
142+
| windows.cpp:290:20:290:52 | *pMapView | semmle.label | *pMapView |
143+
| windows.cpp:292:10:292:16 | * ... | semmle.label | * ... |
144+
| windows.cpp:298:23:298:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 |
145+
| windows.cpp:298:23:298:36 | *call to MapViewOfFile3 | semmle.label | *call to MapViewOfFile3 |
146+
| windows.cpp:299:20:299:52 | *pMapView | semmle.label | *pMapView |
147+
| windows.cpp:301:10:301:16 | * ... | semmle.label | * ... |
148+
| windows.cpp:307:23:307:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp |
149+
| windows.cpp:307:23:307:43 | *call to MapViewOfFile3FromApp | semmle.label | *call to MapViewOfFile3FromApp |
150+
| windows.cpp:308:20:308:52 | *pMapView | semmle.label | *pMapView |
151+
| windows.cpp:310:10:310:16 | * ... | semmle.label | * ... |
152+
| windows.cpp:314:23:314:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx |
153+
| windows.cpp:314:23:314:37 | *call to MapViewOfFileEx | semmle.label | *call to MapViewOfFileEx |
154+
| windows.cpp:315:20:315:52 | *pMapView | semmle.label | *pMapView |
155+
| windows.cpp:317:10:317:16 | * ... | semmle.label | * ... |
156+
| windows.cpp:321:23:321:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp |
157+
| windows.cpp:321:23:321:42 | *call to MapViewOfFileFromApp | semmle.label | *call to MapViewOfFileFromApp |
158+
| windows.cpp:322:20:322:52 | *pMapView | semmle.label | *pMapView |
159+
| windows.cpp:324:10:324:16 | * ... | semmle.label | * ... |
160+
| windows.cpp:328:23:328:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 |
161+
| windows.cpp:328:23:328:40 | *call to MapViewOfFileNuma2 | semmle.label | *call to MapViewOfFileNuma2 |
162+
| windows.cpp:329:20:329:52 | *pMapView | semmle.label | *pMapView |
163+
| windows.cpp:331:10:331:16 | * ... | semmle.label | * ... |
164164
subpaths
165165
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | asio_streams.cpp:100:44:100:62 | call to buffer |
166166
| test.cpp:17:24:17:24 | x | test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | test.cpp:4:5:4:17 | [summary] to write: ReturnValue in ymlStepManual | test.cpp:17:10:17:22 | call to ymlStepManual |

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
| windows.cpp:11:15:11:29 | *call to GetCommandLineA | local |
44
| windows.cpp:23:17:23:38 | *call to GetEnvironmentStringsA | local |
55
| windows.cpp:28:36:28:38 | GetEnvironmentVariableA output argument | local |
6-
| windows.cpp:145:35:145:40 | ReadFile output argument | local |
7-
| windows.cpp:154:23:154:28 | ReadFileEx output argument | local |
8-
| windows.cpp:168:84:168:89 | NtReadFile output argument | local |
9-
| windows.cpp:245:23:245:35 | *call to MapViewOfFile | local |
10-
| windows.cpp:252:23:252:36 | *call to MapViewOfFile2 | local |
11-
| windows.cpp:261:23:261:36 | *call to MapViewOfFile3 | local |
12-
| windows.cpp:270:23:270:43 | *call to MapViewOfFile3FromApp | local |
13-
| windows.cpp:277:23:277:37 | *call to MapViewOfFileEx | local |
14-
| windows.cpp:284:23:284:42 | *call to MapViewOfFileFromApp | local |
15-
| windows.cpp:291:23:291:40 | *call to MapViewOfFileNuma2 | local |
6+
| windows.cpp:164:35:164:40 | ReadFile output argument | local |
7+
| windows.cpp:173:23:173:28 | ReadFileEx output argument | local |
8+
| windows.cpp:185:21:185:26 | ReadFile output argument | local |
9+
| windows.cpp:188:23:188:29 | ReadFileEx output argument | local |
10+
| windows.cpp:194:21:194:26 | ReadFile output argument | local |
11+
| windows.cpp:197:23:197:29 | ReadFileEx output argument | local |
12+
| windows.cpp:205:84:205:89 | NtReadFile output argument | local |
13+
| windows.cpp:282:23:282:35 | *call to MapViewOfFile | local |
14+
| windows.cpp:289:23:289:36 | *call to MapViewOfFile2 | local |
15+
| windows.cpp:298:23:298:36 | *call to MapViewOfFile3 | local |
16+
| windows.cpp:307:23:307:43 | *call to MapViewOfFile3FromApp | local |
17+
| windows.cpp:314:23:314:37 | *call to MapViewOfFileEx | local |
18+
| windows.cpp:321:23:321:42 | *call to MapViewOfFileFromApp | local |
19+
| windows.cpp:328:23:328:40 | *call to MapViewOfFileNuma2 | local |

cpp/ql/test/library-tests/dataflow/external-models/windows.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,25 @@ void FileIOCompletionRoutine(
137137
sink(*buffer); // $ MISSING: ir
138138
}
139139

140+
void FileIOCompletionRoutine2(
141+
DWORD dwErrorCode,
142+
DWORD dwNumberOfBytesTransfered,
143+
LPOVERLAPPED lpOverlapped
144+
) {
145+
char* buffer = reinterpret_cast<char*>(lpOverlapped->hEvent);
146+
sink(buffer);
147+
sink(*buffer); // $ MISSING: ir
148+
}
149+
150+
void FileIOCompletionRoutine3(
151+
DWORD dwErrorCode,
152+
DWORD dwNumberOfBytesTransfered,
153+
LPOVERLAPPED lpOverlapped
154+
) {
155+
char c = reinterpret_cast<char>(lpOverlapped->hEvent);
156+
sink(c); // $ MISSING: ir
157+
}
158+
140159
void readFile(HANDLE hFile) {
141160
{
142161
char buffer[1024];
@@ -159,6 +178,24 @@ void readFile(HANDLE hFile) {
159178
sink(p);
160179
sink(*p); // $ MISSING: ir
161180
}
181+
182+
{
183+
char buffer[1024];
184+
OVERLAPPED overlapped;
185+
ReadFile(hFile, buffer, sizeof(buffer), nullptr, nullptr);
186+
overlapped.hEvent = reinterpret_cast<HANDLE>(buffer);
187+
char buffer2[1024];
188+
ReadFileEx(hFile, buffer2, sizeof(buffer2) - 1, &overlapped, FileIOCompletionRoutine2);
189+
}
190+
191+
{
192+
char buffer[1024];
193+
OVERLAPPED overlapped;
194+
ReadFile(hFile, buffer, sizeof(buffer), nullptr, nullptr);
195+
overlapped.hEvent = reinterpret_cast<HANDLE>(*buffer);
196+
char buffer2[1024];
197+
ReadFileEx(hFile, buffer2, sizeof(buffer2) - 1, &overlapped, FileIOCompletionRoutine3);
198+
}
162199

163200
{
164201
char buffer[1024];

0 commit comments

Comments
 (0)