Skip to content

Commit a520a51

Browse files
committed
highlight the use of the regular expression, instead of the sink for user input
1 parent e8ea720 commit a520a51

File tree

3 files changed

+90
-82
lines changed

3 files changed

+90
-82
lines changed

javascript/ql/src/Performance/PolynomialReDoS.ql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ import semmle.javascript.security.performance.PolynomialReDoS::PolynomialReDoS
1616
import semmle.javascript.security.performance.SuperlinearBackTracking
1717
import DataFlow::PathGraph
1818

19-
from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
19+
from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, Sink sinkNode
2020
where
2121
cfg.hasFlowPath(source, sink) and
22+
sinkNode = sink.getNode() and
2223
not (
2324
source.getNode().(Source).getKind() = "url" and
24-
sink.getNode().(Sink).getRegExp().(PolynomialBackTrackingTerm).isAtEndLine()
25+
sinkNode.getRegExp().(PolynomialBackTrackingTerm).isAtEndLine()
2526
)
26-
select sink.getNode(), source, sink, "This expensive $@ use depends on $@.",
27-
sink.getNode().(Sink).getRegExp(), "regular expression", source.getNode(),
28-
source.getNode().(Source).describe()
27+
select sinkNode.getHighlight(), source, sink, "This expensive $@ use depends on $@.",
28+
sinkNode.getRegExp(), "regular expression", source.getNode(), source.getNode().(Source).describe()

javascript/ql/src/semmle/javascript/security/performance/PolynomialReDoSCustomizations.qll

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ module PolynomialReDoS {
3131
*/
3232
abstract class Sink extends DataFlow::Node {
3333
abstract RegExpTerm getRegExp();
34+
35+
/**
36+
* Gets the node to highlight in the alert message.
37+
*/
38+
DataFlow::Node getHighlight() { result = this }
3439
}
3540

3641
/**
@@ -54,9 +59,10 @@ module PolynomialReDoS {
5459
*/
5560
class PolynomialBackTrackingTermUse extends Sink {
5661
PolynomialBackTrackingTerm term;
62+
DataFlow::MethodCallNode mcn;
5763

5864
PolynomialBackTrackingTermUse() {
59-
exists(DataFlow::MethodCallNode mcn, DataFlow::Node regexp, string name |
65+
exists(DataFlow::Node regexp, string name |
6066
term.getRootTerm() = RegExp::getRegExpFromNode(regexp)
6167
|
6268
this = mcn.getArgument(0) and
@@ -77,6 +83,8 @@ module PolynomialReDoS {
7783
}
7884

7985
override RegExpTerm getRegExp() { result = term }
86+
87+
override DataFlow::Node getHighlight() { result = mcn }
8088
}
8189

8290
/**

0 commit comments

Comments
 (0)