C#: Implement new data flow interface

This commit is contained in:
Tom Hvitved
2024-03-08 09:14:09 +01:00
parent 4291290277
commit 257686eb9a
10 changed files with 19 additions and 15 deletions

View File

@@ -4,7 +4,7 @@ private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific
private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific
private import codeql.dataflow.internal.DataFlowImplConsistency private import codeql.dataflow.internal.DataFlowImplConsistency
private module Input implements InputSig<CsharpDataFlow> { private module Input implements InputSig<Location, CsharpDataFlow> {
private import CsharpDataFlow private import CsharpDataFlow
private predicate isStaticAssignable(Assignable a) { a.(Modifiable).isStatic() } private predicate isStaticAssignable(Assignable a) { a.(Modifiable).isStatic() }
@@ -99,4 +99,4 @@ private module Input implements InputSig<CsharpDataFlow> {
} }
} }
import MakeConsistency<CsharpDataFlow, CsharpTaintTracking, Input> import MakeConsistency<Location, CsharpDataFlow, CsharpTaintTracking, Input>

View File

@@ -8,6 +8,6 @@ import csharp
module DataFlow { module DataFlow {
private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific
private import codeql.dataflow.DataFlow private import codeql.dataflow.DataFlow
import DataFlowMake<CsharpDataFlow> import DataFlowMake<Location, CsharpDataFlow>
import semmle.code.csharp.dataflow.internal.DataFlowImpl1 import semmle.code.csharp.dataflow.internal.DataFlowImpl1
} }

View File

@@ -10,6 +10,6 @@ module TaintTracking {
private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific
private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific
private import codeql.dataflow.TaintTracking private import codeql.dataflow.TaintTracking
import TaintFlowMake<CsharpDataFlow, CsharpTaintTracking> import TaintFlowMake<Location, CsharpDataFlow, CsharpTaintTracking>
import semmle.code.csharp.dataflow.internal.tainttracking1.TaintTrackingImpl import semmle.code.csharp.dataflow.internal.tainttracking1.TaintTrackingImpl
} }

View File

@@ -1,3 +1,4 @@
private import semmle.code.csharp.Location
private import DataFlowImplSpecific private import DataFlowImplSpecific
private import codeql.dataflow.internal.DataFlowImpl private import codeql.dataflow.internal.DataFlowImpl
import MakeImpl<CsharpDataFlow> import MakeImpl<Location, CsharpDataFlow>

View File

@@ -1,3 +1,4 @@
private import semmle.code.csharp.Location
private import DataFlowImplSpecific private import DataFlowImplSpecific
private import codeql.dataflow.internal.DataFlowImplCommon private import codeql.dataflow.internal.DataFlowImplCommon
import MakeImplCommon<CsharpDataFlow> import MakeImplCommon<Location, CsharpDataFlow>

View File

@@ -2,6 +2,7 @@
* Provides C#-specific definitions for use in the data flow library. * Provides C#-specific definitions for use in the data flow library.
*/ */
private import semmle.code.csharp.Location
private import codeql.dataflow.DataFlow private import codeql.dataflow.DataFlow
module Private { module Private {
@@ -13,7 +14,7 @@ module Public {
import DataFlowPublic import DataFlowPublic
} }
module CsharpDataFlow implements InputSig { module CsharpDataFlow implements InputSig<Location> {
import Private import Private
import Public import Public

View File

@@ -58,7 +58,7 @@ class Node extends TNode {
* For more information, see * For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/ */
predicate hasLocationInfo( deprecated predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn string filepath, int startline, int startcolumn, int endline, int endcolumn
) { ) {
this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)

View File

@@ -12,7 +12,7 @@ private import DataFlowImplSpecific::Public
private import semmle.code.csharp.Unification private import semmle.code.csharp.Unification
private import semmle.code.csharp.dataflow.internal.ExternalFlow private import semmle.code.csharp.dataflow.internal.ExternalFlow
module Input implements InputSig<DataFlowImplSpecific::CsharpDataFlow> { module Input implements InputSig<Location, DataFlowImplSpecific::CsharpDataFlow> {
class SummarizedCallableBase = UnboundCallable; class SummarizedCallableBase = UnboundCallable;
ArgumentPosition callbackSelfParameterPosition() { result.isDelegateSelf() } ArgumentPosition callbackSelfParameterPosition() { result.isDelegateSelf() }
@@ -80,7 +80,7 @@ module Input implements InputSig<DataFlowImplSpecific::CsharpDataFlow> {
} }
} }
private import Make<DataFlowImplSpecific::CsharpDataFlow, Input> as Impl private import Make<Location, DataFlowImplSpecific::CsharpDataFlow, Input> as Impl
private module TypesInput implements Impl::Private::TypesInputSig { private module TypesInput implements Impl::Private::TypesInputSig {
DataFlowType getSyntheticGlobalType(Impl::Private::SyntheticGlobal sg) { DataFlowType getSyntheticGlobalType(Impl::Private::SyntheticGlobal sg) {
@@ -154,7 +154,7 @@ private module StepsInput implements Impl::Private::StepsInputSig {
} }
module SourceSinkInterpretationInput implements module SourceSinkInterpretationInput implements
Impl::Private::External::SourceSinkInterpretationInputSig<Location> Impl::Private::External::SourceSinkInterpretationInputSig
{ {
private import csharp as Cs private import csharp as Cs
@@ -252,7 +252,7 @@ module Private {
module External { module External {
import Impl::Private::External import Impl::Private::External
import Impl::Private::External::SourceSinkInterpretation<Location, SourceSinkInterpretationInput> import Impl::Private::External::SourceSinkInterpretation<SourceSinkInterpretationInput>
} }
private module SummaryComponentInternal = Impl::Private::SummaryComponent; private module SummaryComponentInternal = Impl::Private::SummaryComponent;

View File

@@ -2,9 +2,10 @@
* Provides C#-specific definitions for use in the taint tracking library. * Provides C#-specific definitions for use in the taint tracking library.
*/ */
private import semmle.code.csharp.Location
private import codeql.dataflow.TaintTracking private import codeql.dataflow.TaintTracking
private import DataFlowImplSpecific private import DataFlowImplSpecific
module CsharpTaintTracking implements InputSig<CsharpDataFlow> { module CsharpTaintTracking implements InputSig<Location, CsharpDataFlow> {
import TaintTrackingPrivate import TaintTrackingPrivate
} }

View File

@@ -9,7 +9,7 @@ private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific
private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific
private import internal.InlineExpectationsTestImpl private import internal.InlineExpectationsTestImpl
private module FlowTestImpl implements InputSig<CsharpDataFlow> { private module FlowTestImpl implements InputSig<Location, CsharpDataFlow> {
predicate defaultSource(DataFlow::Node source) { predicate defaultSource(DataFlow::Node source) {
source.asExpr().(MethodCall).getTarget().getUndecoratedName() = ["Source", "Taint"] source.asExpr().(MethodCall).getTarget().getUndecoratedName() = ["Source", "Taint"]
} }
@@ -35,4 +35,4 @@ private module FlowTestImpl implements InputSig<CsharpDataFlow> {
} }
} }
import InlineFlowTestMake<CsharpDataFlow, CsharpTaintTracking, Impl, FlowTestImpl> import InlineFlowTestMake<Location, CsharpDataFlow, CsharpTaintTracking, Impl, FlowTestImpl>