Skip to content

Commit 80e8b69

Browse files
committed
C#: Re-factor RegexInjection to use the new API.
1 parent 377b2d7 commit 80e8b69

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ abstract class Sink extends DataFlow::ExprNode { }
2424
abstract class Sanitizer extends DataFlow::ExprNode { }
2525

2626
/**
27+
* DEPRECATED: Use `RegexInjection` instead.
28+
*
2729
* A taint-tracking configuration for untrusted user input used to construct regular expressions.
2830
*/
29-
class TaintTrackingConfiguration extends TaintTracking::Configuration {
31+
deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration {
3032
TaintTrackingConfiguration() { this = "RegexInjection" }
3133

3234
override predicate isSource(DataFlow::Node source) { source instanceof Source }
@@ -36,6 +38,22 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration {
3638
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
3739
}
3840

41+
/**
42+
* A taint-tracking configuration for untrusted user input used to construct regular expressions.
43+
*/
44+
private module RegexInjectionConfig implements DataFlow::ConfigSig {
45+
predicate isSource(DataFlow::Node source) { source instanceof Source }
46+
47+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
48+
49+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
50+
}
51+
52+
/**
53+
* A taint-tracking module for untrusted user input used to construct regular expressions.
54+
*/
55+
module RegexInjection = TaintTracking::Global<RegexInjectionConfig>;
56+
3957
/** A source of remote user input. */
4058
class RemoteSource extends Source instanceof RemoteFlowSource { }
4159

csharp/ql/src/Security Features/CWE-730/RegexInjection.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
import csharp
1717
import semmle.code.csharp.security.dataflow.RegexInjectionQuery
1818
import semmle.code.csharp.frameworks.system.text.RegularExpressions
19-
import semmle.code.csharp.dataflow.DataFlow::DataFlow::PathGraph
19+
import RegexInjection::PathGraph
2020

21-
from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink
21+
from RegexInjection::PathNode source, RegexInjection::PathNode sink
2222
where
23-
c.hasFlowPath(source, sink) and
23+
RegexInjection::flowPath(source, sink) and
2424
// No global timeout set
2525
not exists(RegexGlobalTimeout r)
2626
select sink.getNode(), source, sink, "This regular expression is constructed from a $@.",

0 commit comments

Comments
 (0)