mirror of
https://github.com/github/codeql.git
synced 2025-12-22 11:46:32 +01:00
C++: Make the sequence container classes public.
This commit is contained in:
@@ -123,7 +123,7 @@ private class StdSequenceContainerData extends TaintFunction {
|
|||||||
/**
|
/**
|
||||||
* The standard container functions `push_back` and `push_front`.
|
* The standard container functions `push_back` and `push_front`.
|
||||||
*/
|
*/
|
||||||
private class StdSequenceContainerPush extends TaintFunction {
|
class StdSequenceContainerPush extends MemberFunction {
|
||||||
StdSequenceContainerPush() {
|
StdSequenceContainerPush() {
|
||||||
this.getClassAndName("push_back") instanceof Vector or
|
this.getClassAndName("push_back") instanceof Vector or
|
||||||
this.getClassAndName(["push_back", "push_front"]) instanceof Deque or
|
this.getClassAndName(["push_back", "push_front"]) instanceof Deque or
|
||||||
@@ -131,6 +131,17 @@ private class StdSequenceContainerPush extends TaintFunction {
|
|||||||
this.getClassAndName(["push_back", "push_front"]) instanceof List
|
this.getClassAndName(["push_back", "push_front"]) instanceof List
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the index of a parameter to this function that is a reference to the
|
||||||
|
* value type of the container.
|
||||||
|
*/
|
||||||
|
int getAValueTypeParameterIndex() {
|
||||||
|
this.getParameter(result).getUnspecifiedType().(ReferenceType).getBaseType() =
|
||||||
|
this.getDeclaringType().getTemplateArgument(0).(Type).getUnspecifiedType() // i.e. the `T` of this `std::vector<T>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StdSequenceContainerPushModel extends StdSequenceContainerPush, TaintFunction {
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||||
// flow from parameter to qualifier
|
// flow from parameter to qualifier
|
||||||
input.isParameterDeref(0) and
|
input.isParameterDeref(0) and
|
||||||
@@ -160,7 +171,7 @@ private class StdSequenceContainerFrontBack extends TaintFunction {
|
|||||||
/**
|
/**
|
||||||
* The standard container functions `insert` and `insert_after`.
|
* The standard container functions `insert` and `insert_after`.
|
||||||
*/
|
*/
|
||||||
private class StdSequenceContainerInsert extends TaintFunction {
|
class StdSequenceContainerInsert extends MemberFunction {
|
||||||
StdSequenceContainerInsert() {
|
StdSequenceContainerInsert() {
|
||||||
this.getClassAndName("insert") instanceof Deque or
|
this.getClassAndName("insert") instanceof Deque or
|
||||||
this.getClassAndName("insert") instanceof List or
|
this.getClassAndName("insert") instanceof List or
|
||||||
@@ -181,7 +192,9 @@ private class StdSequenceContainerInsert extends TaintFunction {
|
|||||||
* Gets the index of a parameter to this function that is an iterator.
|
* Gets the index of a parameter to this function that is an iterator.
|
||||||
*/
|
*/
|
||||||
int getAnIteratorParameterIndex() { this.getParameter(result).getType() instanceof Iterator }
|
int getAnIteratorParameterIndex() { this.getParameter(result).getType() instanceof Iterator }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StdSequenceContainerInsertModel extends StdSequenceContainerInsert, TaintFunction {
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||||
// flow from parameter to container itself (qualifier) and return value
|
// flow from parameter to container itself (qualifier) and return value
|
||||||
(
|
(
|
||||||
@@ -253,11 +266,28 @@ private class StdSequenceContainerAt extends TaintFunction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard vector `emplace` function.
|
* The standard `emplace` function.
|
||||||
*/
|
*/
|
||||||
class StdVectorEmplace extends TaintFunction {
|
class StdSequenceEmplace extends MemberFunction {
|
||||||
StdVectorEmplace() { this.getClassAndName("emplace") instanceof Vector }
|
StdSequenceEmplace() {
|
||||||
|
this.getClassAndName("emplace") instanceof Vector
|
||||||
|
or
|
||||||
|
this.getClassAndName("emplace") instanceof List
|
||||||
|
or
|
||||||
|
this.getClassAndName("emplace") instanceof Deque
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the index of a parameter to this function that is a reference to the
|
||||||
|
* value type of the container.
|
||||||
|
*/
|
||||||
|
int getAValueTypeParameterIndex() {
|
||||||
|
this.getParameter(result).getUnspecifiedType().(ReferenceType).getBaseType() =
|
||||||
|
this.getDeclaringType().getTemplateArgument(0).(Type).getUnspecifiedType() // i.e. the `T` of this `std::vector<T>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StdSequenceEmplaceModel extends StdSequenceEmplace, TaintFunction {
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||||
// flow from any parameter except the position iterator to qualifier and return value
|
// flow from any parameter except the position iterator to qualifier and return value
|
||||||
// (here we assume taint flow from any constructor parameter to the constructed object)
|
// (here we assume taint flow from any constructor parameter to the constructed object)
|
||||||
@@ -269,12 +299,36 @@ class StdVectorEmplace extends TaintFunction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The standard vector `emplace` function.
|
||||||
|
*/
|
||||||
|
class StdVectorEmplace extends StdSequenceEmplace {
|
||||||
|
StdVectorEmplace() { this.getDeclaringType() instanceof Vector }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard vector `emplace_back` function.
|
* The standard vector `emplace_back` function.
|
||||||
*/
|
*/
|
||||||
class StdVectorEmplaceBack extends TaintFunction {
|
class StdSequenceEmplaceBack extends MemberFunction {
|
||||||
StdVectorEmplaceBack() { this.getClassAndName("emplace_back") instanceof Vector }
|
StdSequenceEmplaceBack() {
|
||||||
|
this.getClassAndName("emplace_back") instanceof Vector
|
||||||
|
or
|
||||||
|
this.getClassAndName("emplace_back") instanceof List
|
||||||
|
or
|
||||||
|
this.getClassAndName("emplace_back") instanceof Deque
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the index of a parameter to this function that is a reference to the
|
||||||
|
* value type of the container.
|
||||||
|
*/
|
||||||
|
int getAValueTypeParameterIndex() {
|
||||||
|
this.getParameter(result).getUnspecifiedType().(ReferenceType).getBaseType() =
|
||||||
|
this.getDeclaringType().getTemplateArgument(0).(Type).getUnspecifiedType() // i.e. the `T` of this `std::vector<T>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StdSequenceEmplaceBackModel extends StdSequenceEmplaceBack, TaintFunction {
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||||
// flow from any parameter to qualifier
|
// flow from any parameter to qualifier
|
||||||
// (here we assume taint flow from any constructor parameter to the constructed object)
|
// (here we assume taint flow from any constructor parameter to the constructed object)
|
||||||
@@ -282,3 +336,10 @@ class StdVectorEmplaceBack extends TaintFunction {
|
|||||||
output.isQualifierObject()
|
output.isQualifierObject()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The standard vector `emplace_back` function.
|
||||||
|
*/
|
||||||
|
class StdVectorEmplaceBack extends StdSequenceEmplaceBack {
|
||||||
|
StdVectorEmplaceBack() { this.getDeclaringType() instanceof Vector }
|
||||||
|
}
|
||||||
|
|||||||
@@ -99,9 +99,11 @@ private class StdStringConstructor extends Constructor, StdStringTaintFunction {
|
|||||||
/**
|
/**
|
||||||
* The `std::string` function `c_str`.
|
* The `std::string` function `c_str`.
|
||||||
*/
|
*/
|
||||||
private class StdStringCStr extends StdStringTaintFunction {
|
class StdStringCStr extends MemberFunction {
|
||||||
StdStringCStr() { this.getClassAndName("c_str") instanceof StdBasicString }
|
StdStringCStr() { this.getClassAndName("c_str") instanceof StdBasicString }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StdStringCStrModel extends StdStringCStr, StdStringTaintFunction {
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||||
// flow from string itself (qualifier) to return value
|
// flow from string itself (qualifier) to return value
|
||||||
input.isQualifierObject() and
|
input.isQualifierObject() and
|
||||||
|
|||||||
Reference in New Issue
Block a user