File tree Expand file tree Collapse file tree
java/ql/lib/semmle/code/java Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -104,6 +104,17 @@ private predicate constantBooleanExpr(Expr e, boolean val) {
104104 CalcConstants:: calculateBooleanValue ( e ) = val
105105}
106106
107+ pragma [ nomagic]
108+ private predicate constantStringExpr ( Expr e , string val ) {
109+ e .( CompileTimeConstantExpr ) .getStringValue ( ) = val
110+ or
111+ exists ( SsaExplicitUpdate v , Expr src |
112+ e = v .getAUse ( ) and
113+ src = v .getDefiningExpr ( ) .( VariableAssign ) .getSource ( ) and
114+ constantStringExpr ( src , val )
115+ )
116+ }
117+
107118private boolean getBoolValue ( Expr e ) { constantBooleanExpr ( e , result ) }
108119
109120private int getIntValue ( Expr e ) { constantIntegerExpr ( e , result ) }
@@ -126,6 +137,14 @@ class ConstantBooleanExpr extends Expr {
126137 boolean getBooleanValue ( ) { constantBooleanExpr ( this , result ) }
127138}
128139
140+ /** An expression that always has the same string value. */
141+ class ConstantStringExpr extends Expr {
142+ ConstantStringExpr ( ) { constantStringExpr ( this , _) }
143+
144+ /** Get the string value of this expression. */
145+ string getStringValue ( ) { constantStringExpr ( this , result ) }
146+ }
147+
129148/**
130149 * Gets an expression that equals `v - d`.
131150 */
Original file line number Diff line number Diff line change @@ -4,9 +4,7 @@ import java
44import semmle.code.java.dataflow.DataFlow
55import semmle.code.java.dataflow.DataFlow2
66import semmle.code.java.dataflow.DataFlow3
7- import semmle.code.java.dataflow.DataFlow4
8- import semmle.code.java.dataflow.DataFlow5
9- private import semmle.code.java.dataflow.SSA
7+ private import semmle.code.java.dataflow.RangeUtils
108
119/*
1210 * Various XML parsers in Java.
@@ -130,26 +128,6 @@ class DocumentBuilderFactoryConfig extends ParserConfig {
130128 }
131129}
132130
133- private predicate constantStringExpr ( Expr e , string val ) {
134- e .( CompileTimeConstantExpr ) .getStringValue ( ) = val
135- or
136- exists ( SsaExplicitUpdate v , Expr src |
137- e = v .getAUse ( ) and
138- src = v .getDefiningExpr ( ) .( VariableAssign ) .getSource ( ) and
139- constantStringExpr ( src , val )
140- )
141- }
142-
143- /** An expression that always has the same string value. */
144- private class ConstantStringExpr extends Expr {
145- string value ;
146-
147- ConstantStringExpr ( ) { constantStringExpr ( this , value ) }
148-
149- /** Get the string value of this expression. */
150- string getStringValue ( ) { result = value }
151- }
152-
153131/**
154132 * A general configuration that is safe when enabled.
155133 */
You can’t perform that action at this time.
0 commit comments