@@ -41,15 +41,15 @@ module CleartextLogging {
41
41
* Holds if `re` may be a regular expression that can be used to sanitize
42
42
* sensitive data with a call to `sub`.
43
43
*/
44
- private predicate effectiveSubRegExp ( RegExpLiteral re ) {
44
+ private predicate effectiveSubRegExp ( CfgNodes :: ExprNodes :: RegExpLiteralCfgNode re ) {
45
45
re .getConstantValue ( ) .getStringOrSymbol ( ) .matches ( [ ".*" , ".+" ] )
46
46
}
47
47
48
48
/**
49
49
* Holds if `re` may be a regular expression that can be used to sanitize
50
50
* sensitive data with a call to `gsub`.
51
51
*/
52
- private predicate effectiveGsubRegExp ( RegExpLiteral re ) {
52
+ private predicate effectiveGsubRegExp ( CfgNodes :: ExprNodes :: RegExpLiteralCfgNode re ) {
53
53
re .getConstantValue ( ) .getStringOrSymbol ( ) .matches ( "." )
54
54
}
55
55
@@ -58,8 +58,8 @@ module CleartextLogging {
58
58
*/
59
59
private class MaskingReplacerSanitizer extends Sanitizer , DataFlow:: CallNode {
60
60
MaskingReplacerSanitizer ( ) {
61
- exists ( RegExpLiteral re |
62
- re = this .getArgument ( 0 ) .asExpr ( ) . getExpr ( ) and
61
+ exists ( CfgNodes :: ExprNodes :: RegExpLiteralCfgNode re |
62
+ re = this .getArgument ( 0 ) .asExpr ( ) and
63
63
(
64
64
this .getMethodName ( ) = [ "sub" , "sub!" ] and effectiveSubRegExp ( re )
65
65
or
@@ -124,8 +124,7 @@ module CleartextLogging {
124
124
or
125
125
// dereferencing a non-sensitive field
126
126
this .asExpr ( )
127
- .getExpr ( )
128
- .( ElementReference )
127
+ .( CfgNodes:: ExprNodes:: ElementReferenceCfgNode )
129
128
.getArgument ( 0 )
130
129
.getConstantValue ( )
131
130
.getStringOrSymbol ( ) = name
@@ -136,8 +135,7 @@ module CleartextLogging {
136
135
or
137
136
// avoid i18n strings
138
137
this .asExpr ( )
139
- .getExpr ( )
140
- .( ElementReference )
138
+ .( CfgNodes:: ExprNodes:: ElementReferenceCfgNode )
141
139
.getReceiver ( )
142
140
.getConstantValue ( )
143
141
.getStringOrSymbol ( )
@@ -161,13 +159,12 @@ module CleartextLogging {
161
159
162
160
// `writeNode` assigns pair with key `name` to `val`
163
161
private predicate hashKeyWrite ( DataFlow:: CallNode writeNode , string name , DataFlow:: Node val ) {
164
- exists ( SetterMethodCall setter |
165
- setter = writeNode .asExpr ( ) .getExpr ( ) and
166
- // hash[name]
167
- setter .getArgument ( 0 ) .getConstantValue ( ) .getStringOrSymbol ( ) = name and
168
- // val
169
- setter .getArgument ( 1 ) .( Assignment ) .getRightOperand ( ) = val .asExpr ( ) .getExpr ( )
170
- )
162
+ writeNode .asExpr ( ) .getExpr ( ) instanceof SetterMethodCall and
163
+ // hash[name]
164
+ writeNode .getArgument ( 0 ) .asExpr ( ) .getConstantValue ( ) .getStringOrSymbol ( ) = name and
165
+ // val
166
+ writeNode .getArgument ( 1 ) .asExpr ( ) .( CfgNodes:: ExprNodes:: AssignExprCfgNode ) .getRhs ( ) =
167
+ val .asExpr ( )
171
168
}
172
169
173
170
/**
0 commit comments