Skip to content

Commit 33212da

Browse files
committed
C++: Add a MaD model for 'CAtlTemporaryFile' and mark reads as local flow sources.
1 parent 67ba85a commit 33212da

4 files changed

Lines changed: 27 additions & 1 deletion

File tree

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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+
- ["", "CAtlTemporaryFile", True, "Create", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
7+
- ["", "CAtlTemporaryFile", True, "Read", "", "", "Argument[-1]", "Argument[*0]", "taint", "manual"]
8+
- ["", "CAtlTemporaryFile", True, "Write", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]

cpp/ql/lib/semmle/code/cpp/models/Models.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,4 @@ private import implementations.CComBSTR
5555
private import implementations.CPathT
5656
private import implementations.CAtlFile
5757
private import implementations.CAtlFileMapping
58+
private import implementations.CAtlTemporaryFile
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import semmle.code.cpp.models.interfaces.FlowSource
2+
3+
/**
4+
* The `CAtlFile` class from Microsoft's Active Template Library.
5+
*/
6+
class CAtlTemporaryFile extends Class {
7+
CAtlTemporaryFile() { this.hasGlobalName("CAtlTemporaryFile") }
8+
}
9+
10+
private class CAtlTemporaryFileRead extends MemberFunction, LocalFlowSourceFunction {
11+
CAtlTemporaryFileRead() { this.getClassAndName("Read") instanceof CAtlTemporaryFile }
12+
13+
override predicate hasLocalFlowSource(FunctionOutput output, string description) {
14+
output.isParameterDeref(0) and
15+
description = "string read by " + this.getName()
16+
}
17+
}

cpp/ql/test/library-tests/dataflow/source-sink-tests/atl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,5 +213,5 @@ void test_CAtlTemporaryFile() {
213213
CAtlTemporaryFile file;
214214
char buffer[1024];
215215
DWORD bytesRead;
216-
file.Read(buffer, 1024, bytesRead); // $ MISSING: local_source
216+
file.Read(buffer, 1024, bytesRead); // $ local_source
217217
}

0 commit comments

Comments
 (0)