@@ -70,58 +70,150 @@ private class ApacheArrayUtilsModel extends SummaryModelCsv {
70
70
}
71
71
}
72
72
73
- private Type getAnExcludedParameterType ( ) {
74
- result instanceof PrimitiveType or
75
- result .( RefType ) .hasQualifiedName ( "java.nio.charset" , "Charset" ) or
76
- result .( RefType ) .hasQualifiedName ( "java.util" , "Locale" )
77
- }
78
-
79
- private class ApacheStringUtilsTaintPreservingMethod extends TaintPreservingCallable {
80
- ApacheStringUtilsTaintPreservingMethod ( ) {
81
- this .getDeclaringType ( ) .hasQualifiedName ( "org.apache.commons.lang3" , "StringUtils" ) and
82
- this .hasName ( [
83
- "abbreviate" , "abbreviateMiddle" , "appendIfMissing" , "appendIfMissingIgnoreCase" ,
84
- "capitalize" , "center" , "chomp" , "chop" , "defaultIfBlank" , "defaultIfEmpty" ,
85
- "defaultString" , "deleteWhitespace" , "difference" , "firstNonBlank" , "firstNonEmpty" ,
86
- "getBytes" , "getCommonPrefix" , "getDigits" , "getIfBlank" , "getIfEmpty" , "join" , "joinWith" ,
87
- "left" , "leftPad" , "lowerCase" , "mid" , "normalizeSpace" , "overlay" , "prependIfMissing" ,
88
- "prependIfMissingIgnoreCase" , "remove" , "removeAll" , "removeEnd" , "removeEndIgnoreCase" ,
89
- "removeFirst" , "removeIgnoreCase" , "removePattern" , "removeStart" , "removeStartIgnoreCase" ,
90
- "repeat" , "replace" , "replaceAll" , "replaceChars" , "replaceEach" , "replaceEachRepeatedly" ,
91
- "replaceFirst" , "replaceIgnoreCase" , "replaceOnce" , "replaceOnceIgnoreCase" ,
92
- "replacePattern" , "reverse" , "reverseDelimited" , "right" , "rightPad" , "rotate" , "split" ,
93
- "splitByCharacterType" , "splitByCharacterTypeCamelCase" , "splitByWholeSeparator" ,
94
- "splitByWholeSeparatorPreserveAllTokens" , "splitPreserveAllTokens" , "strip" , "stripAccents" ,
95
- "stripAll" , "stripEnd" , "stripStart" , "stripToEmpty" , "stripToNull" , "substring" ,
96
- "substringAfter" , "substringAfterLast" , "substringBefore" , "substringBeforeLast" ,
97
- "substringBetween" , "substringsBetween" , "swapCase" , "toCodePoints" , "toEncodedString" ,
98
- "toRootLowerCase" , "toRootUpperCase" , "toString" , "trim" , "trimToEmpty" , "trimToNull" ,
99
- "truncate" , "uncapitalize" , "unwrap" , "upperCase" , "valueOf" , "wrap" , "wrapIfMissing"
100
- ] )
101
- }
102
-
103
- private predicate isExcludedParameter ( int arg ) {
104
- this .getName ( ) .matches ( [ "appendIfMissing%" , "prependIfMissing%" ] ) and arg = [ 2 , 3 ]
105
- or
106
- this .getName ( ) .matches ( [ "remove%" , "split%" , "substring%" , "strip%" ] ) and
107
- arg = [ 1 .. getNumberOfParameters ( ) - 1 ]
108
- or
109
- this .getName ( ) .matches ( [ "chomp" , "getBytes" , "replace%" , "toString" , "unwrap" ] ) and arg = 1
110
- or
111
- this .getName ( ) = "join" and
112
- // Exclude joins of types that render numerically (char[] and non-primitive arrays
113
- // are still considered taint sources)
114
- exists ( PrimitiveType pt |
115
- this .getParameterType ( arg ) .( Array ) .getComponentType ( ) = pt and
116
- not pt instanceof CharacterType
117
- ) and
118
- arg = 0
119
- }
120
-
121
- override predicate returnsTaintFrom ( int arg ) {
122
- arg = [ 0 .. getNumberOfParameters ( ) - 1 ] and
123
- not this .getParameterType ( arg ) = getAnExcludedParameterType ( ) and
124
- not isExcludedParameter ( arg )
73
+ private class ApacheStringUtilsModel extends SummaryModelCsv {
74
+ override predicate row ( string row ) {
75
+ row =
76
+ [
77
+ "org.apache.commons.lang3;StringUtils;false;abbreviate;(java.lang.String,java.lang.String,int);;Argument[1];ReturnValue;taint" ,
78
+ "org.apache.commons.lang3;StringUtils;false;abbreviate;(java.lang.String,java.lang.String,int,int);;Argument[1];ReturnValue;taint" ,
79
+ "org.apache.commons.lang3;StringUtils;false;abbreviate;;;Argument[0];ReturnValue;taint" ,
80
+ "org.apache.commons.lang3;StringUtils;false;abbreviateMiddle;;;Argument[0];ReturnValue;taint" ,
81
+ "org.apache.commons.lang3;StringUtils;false;abbreviateMiddle;;;Argument[1];ReturnValue;taint" ,
82
+ "org.apache.commons.lang3;StringUtils;false;appendIfMissing;;;Argument[0];ReturnValue;taint" ,
83
+ "org.apache.commons.lang3;StringUtils;false;appendIfMissing;;;Argument[1];ReturnValue;taint" ,
84
+ "org.apache.commons.lang3;StringUtils;false;appendIfMissingIgnoreCase;;;Argument[0];ReturnValue;taint" ,
85
+ "org.apache.commons.lang3;StringUtils;false;appendIfMissingIgnoreCase;;;Argument[1];ReturnValue;taint" ,
86
+ "org.apache.commons.lang3;StringUtils;false;capitalize;;;Argument;ReturnValue;taint" ,
87
+ "org.apache.commons.lang3;StringUtils;false;center;(java.lang.String,int,java.lang.String);;Argument[2];ReturnValue;taint" ,
88
+ "org.apache.commons.lang3;StringUtils;false;center;;;Argument[0];ReturnValue;taint" ,
89
+ "org.apache.commons.lang3;StringUtils;false;chomp;(java.lang.String);;Argument;ReturnValue;taint" ,
90
+ "org.apache.commons.lang3;StringUtils;false;chomp;(java.lang.String,java.lang.String);;Argument[0];ReturnValue;taint" ,
91
+ "org.apache.commons.lang3;StringUtils;false;chop;;;Argument;ReturnValue;taint" ,
92
+ "org.apache.commons.lang3;StringUtils;false;defaultIfBlank;;;Argument;ReturnValue;taint" ,
93
+ "org.apache.commons.lang3;StringUtils;false;defaultIfEmpty;;;Argument;ReturnValue;taint" ,
94
+ "org.apache.commons.lang3;StringUtils;false;defaultString;;;Argument;ReturnValue;taint" ,
95
+ "org.apache.commons.lang3;StringUtils;false;deleteWhitespace;;;Argument;ReturnValue;taint" ,
96
+ "org.apache.commons.lang3;StringUtils;false;difference;;;Argument;ReturnValue;taint" ,
97
+ "org.apache.commons.lang3;StringUtils;false;firstNonBlank;;;Argument;ReturnValue;taint" ,
98
+ "org.apache.commons.lang3;StringUtils;false;firstNonEmpty;;;Argument;ReturnValue;taint" ,
99
+ "org.apache.commons.lang3;StringUtils;false;getBytes;;;Argument[0];ReturnValue;taint" ,
100
+ "org.apache.commons.lang3;StringUtils;false;getCommonPrefix;;;Argument;ReturnValue;taint" ,
101
+ "org.apache.commons.lang3;StringUtils;false;getDigits;;;Argument;ReturnValue;taint" ,
102
+ "org.apache.commons.lang3;StringUtils;false;getIfBlank;;;Argument;ReturnValue;taint" ,
103
+ "org.apache.commons.lang3;StringUtils;false;getIfEmpty;;;Argument;ReturnValue;taint" ,
104
+ "org.apache.commons.lang3;StringUtils;false;join;(char[],char);;Argument[0];ReturnValue;taint" ,
105
+ "org.apache.commons.lang3;StringUtils;false;join;(char[],char,int,int);;Argument[0];ReturnValue;taint" ,
106
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Iterable,char);;Argument[0];ReturnValue;taint" ,
107
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Iterable,java.lang.String);;Argument;ReturnValue;taint" ,
108
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Object[]);;Argument;ReturnValue;taint" ,
109
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Object[],char);;Argument[0];ReturnValue;taint" ,
110
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Object[],char,int,int);;Argument[0];ReturnValue;taint" ,
111
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Object[],java.lang.String);;Argument;ReturnValue;taint" ,
112
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Object[],java.lang.String,int,int);;Argument[0];ReturnValue;taint" ,
113
+ "org.apache.commons.lang3;StringUtils;false;join;(java.lang.Object[],java.lang.String,int,int);;Argument[1];ReturnValue;taint" ,
114
+ "org.apache.commons.lang3;StringUtils;false;join;(java.util.Iterator,char);;Argument[0];ReturnValue;taint" ,
115
+ "org.apache.commons.lang3;StringUtils;false;join;(java.util.Iterator,java.lang.String);;Argument;ReturnValue;taint" ,
116
+ "org.apache.commons.lang3;StringUtils;false;join;(java.util.List,char,int,int);;Argument[0];ReturnValue;taint" ,
117
+ "org.apache.commons.lang3;StringUtils;false;join;(java.util.List,java.lang.String,int,int);;Argument[0];ReturnValue;taint" ,
118
+ "org.apache.commons.lang3;StringUtils;false;join;(java.util.List,java.lang.String,int,int);;Argument[1];ReturnValue;taint" ,
119
+ "org.apache.commons.lang3;StringUtils;false;joinWith;;;Argument;ReturnValue;taint" ,
120
+ "org.apache.commons.lang3;StringUtils;false;left;;;Argument[0];ReturnValue;taint" ,
121
+ "org.apache.commons.lang3;StringUtils;false;leftPad;(java.lang.String,int,java.lang.String);;Argument[2];ReturnValue;taint" ,
122
+ "org.apache.commons.lang3;StringUtils;false;leftPad;;;Argument[0];ReturnValue;taint" ,
123
+ "org.apache.commons.lang3;StringUtils;false;lowerCase;(java.lang.String);;Argument;ReturnValue;taint" ,
124
+ "org.apache.commons.lang3;StringUtils;false;lowerCase;(java.lang.String,java.util.Locale);;Argument[0];ReturnValue;taint" ,
125
+ "org.apache.commons.lang3;StringUtils;false;mid;;;Argument[0];ReturnValue;taint" ,
126
+ "org.apache.commons.lang3;StringUtils;false;normalizeSpace;;;Argument;ReturnValue;taint" ,
127
+ "org.apache.commons.lang3;StringUtils;false;overlay;;;Argument[0];ReturnValue;taint" ,
128
+ "org.apache.commons.lang3;StringUtils;false;overlay;;;Argument[1];ReturnValue;taint" ,
129
+ "org.apache.commons.lang3;StringUtils;false;prependIfMissing;;;Argument[0];ReturnValue;taint" ,
130
+ "org.apache.commons.lang3;StringUtils;false;prependIfMissing;;;Argument[1];ReturnValue;taint" ,
131
+ "org.apache.commons.lang3;StringUtils;false;prependIfMissingIgnoreCase;;;Argument[0];ReturnValue;taint" ,
132
+ "org.apache.commons.lang3;StringUtils;false;prependIfMissingIgnoreCase;;;Argument[1];ReturnValue;taint" ,
133
+ "org.apache.commons.lang3;StringUtils;false;remove;;;Argument[0];ReturnValue;taint" ,
134
+ "org.apache.commons.lang3;StringUtils;false;removeAll;;;Argument[0];ReturnValue;taint" ,
135
+ "org.apache.commons.lang3;StringUtils;false;removeEnd;;;Argument[0];ReturnValue;taint" ,
136
+ "org.apache.commons.lang3;StringUtils;false;removeEndIgnoreCase;;;Argument[0];ReturnValue;taint" ,
137
+ "org.apache.commons.lang3;StringUtils;false;removeFirst;;;Argument[0];ReturnValue;taint" ,
138
+ "org.apache.commons.lang3;StringUtils;false;removeIgnoreCase;;;Argument[0];ReturnValue;taint" ,
139
+ "org.apache.commons.lang3;StringUtils;false;removePattern;;;Argument[0];ReturnValue;taint" ,
140
+ "org.apache.commons.lang3;StringUtils;false;removeStart;;;Argument[0];ReturnValue;taint" ,
141
+ "org.apache.commons.lang3;StringUtils;false;removeStartIgnoreCase;;;Argument[0];ReturnValue;taint" ,
142
+ "org.apache.commons.lang3;StringUtils;false;repeat;(java.lang.String,java.lang.String,int);;Argument[1];ReturnValue;taint" ,
143
+ "org.apache.commons.lang3;StringUtils;false;repeat;;;Argument[0];ReturnValue;taint" ,
144
+ "org.apache.commons.lang3;StringUtils;false;replace;;;Argument[0];ReturnValue;taint" ,
145
+ "org.apache.commons.lang3;StringUtils;false;replace;;;Argument[2];ReturnValue;taint" ,
146
+ "org.apache.commons.lang3;StringUtils;false;replaceAll;;;Argument[0];ReturnValue;taint" ,
147
+ "org.apache.commons.lang3;StringUtils;false;replaceAll;;;Argument[2];ReturnValue;taint" ,
148
+ "org.apache.commons.lang3;StringUtils;false;replaceChars;(java.lang.String,java.lang.String,java.lang.String);;Argument[2];ReturnValue;taint" ,
149
+ "org.apache.commons.lang3;StringUtils;false;replaceChars;;;Argument[0];ReturnValue;taint" ,
150
+ "org.apache.commons.lang3;StringUtils;false;replaceEach;;;Argument[0];ReturnValue;taint" ,
151
+ "org.apache.commons.lang3;StringUtils;false;replaceEach;;;Argument[2];ReturnValue;taint" ,
152
+ "org.apache.commons.lang3;StringUtils;false;replaceEachRepeatedly;;;Argument[0];ReturnValue;taint" ,
153
+ "org.apache.commons.lang3;StringUtils;false;replaceEachRepeatedly;;;Argument[2];ReturnValue;taint" ,
154
+ "org.apache.commons.lang3;StringUtils;false;replaceFirst;;;Argument[0];ReturnValue;taint" ,
155
+ "org.apache.commons.lang3;StringUtils;false;replaceFirst;;;Argument[2];ReturnValue;taint" ,
156
+ "org.apache.commons.lang3;StringUtils;false;replaceIgnoreCase;;;Argument[0];ReturnValue;taint" ,
157
+ "org.apache.commons.lang3;StringUtils;false;replaceIgnoreCase;;;Argument[2];ReturnValue;taint" ,
158
+ "org.apache.commons.lang3;StringUtils;false;replaceOnce;;;Argument[0];ReturnValue;taint" ,
159
+ "org.apache.commons.lang3;StringUtils;false;replaceOnce;;;Argument[2];ReturnValue;taint" ,
160
+ "org.apache.commons.lang3;StringUtils;false;replaceOnceIgnoreCase;;;Argument[0];ReturnValue;taint" ,
161
+ "org.apache.commons.lang3;StringUtils;false;replaceOnceIgnoreCase;;;Argument[2];ReturnValue;taint" ,
162
+ "org.apache.commons.lang3;StringUtils;false;replacePattern;;;Argument[0];ReturnValue;taint" ,
163
+ "org.apache.commons.lang3;StringUtils;false;replacePattern;;;Argument[2];ReturnValue;taint" ,
164
+ "org.apache.commons.lang3;StringUtils;false;reverse;;;Argument;ReturnValue;taint" ,
165
+ "org.apache.commons.lang3;StringUtils;false;reverseDelimited;;;Argument[0];ReturnValue;taint" ,
166
+ "org.apache.commons.lang3;StringUtils;false;right;;;Argument[0];ReturnValue;taint" ,
167
+ "org.apache.commons.lang3;StringUtils;false;rightPad;(java.lang.String,int,java.lang.String);;Argument[2];ReturnValue;taint" ,
168
+ "org.apache.commons.lang3;StringUtils;false;rightPad;;;Argument[0];ReturnValue;taint" ,
169
+ "org.apache.commons.lang3;StringUtils;false;rotate;;;Argument[0];ReturnValue;taint" ,
170
+ "org.apache.commons.lang3;StringUtils;false;split;(java.lang.String);;Argument;ReturnValue;taint" ,
171
+ "org.apache.commons.lang3;StringUtils;false;split;(java.lang.String,char);;Argument[0];ReturnValue;taint" ,
172
+ "org.apache.commons.lang3;StringUtils;false;split;(java.lang.String,java.lang.String);;Argument[0];ReturnValue;taint" ,
173
+ "org.apache.commons.lang3;StringUtils;false;split;(java.lang.String,java.lang.String,int);;Argument[0];ReturnValue;taint" ,
174
+ "org.apache.commons.lang3;StringUtils;false;splitByCharacterType;;;Argument;ReturnValue;taint" ,
175
+ "org.apache.commons.lang3;StringUtils;false;splitByCharacterTypeCamelCase;;;Argument;ReturnValue;taint" ,
176
+ "org.apache.commons.lang3;StringUtils;false;splitByWholeSeparator;;;Argument[0];ReturnValue;taint" ,
177
+ "org.apache.commons.lang3;StringUtils;false;splitByWholeSeparatorPreserveAllTokens;;;Argument[0];ReturnValue;taint" ,
178
+ "org.apache.commons.lang3;StringUtils;false;splitPreserveAllTokens;(java.lang.String);;Argument;ReturnValue;taint" ,
179
+ "org.apache.commons.lang3;StringUtils;false;splitPreserveAllTokens;(java.lang.String,char);;Argument[0];ReturnValue;taint" ,
180
+ "org.apache.commons.lang3;StringUtils;false;splitPreserveAllTokens;(java.lang.String,java.lang.String);;Argument[0];ReturnValue;taint" ,
181
+ "org.apache.commons.lang3;StringUtils;false;splitPreserveAllTokens;(java.lang.String,java.lang.String,int);;Argument[0];ReturnValue;taint" ,
182
+ "org.apache.commons.lang3;StringUtils;false;strip;(java.lang.String);;Argument;ReturnValue;taint" ,
183
+ "org.apache.commons.lang3;StringUtils;false;strip;(java.lang.String,java.lang.String);;Argument[0];ReturnValue;taint" ,
184
+ "org.apache.commons.lang3;StringUtils;false;stripAccents;;;Argument;ReturnValue;taint" ,
185
+ "org.apache.commons.lang3;StringUtils;false;stripAll;;;Argument[0];ReturnValue;taint" ,
186
+ "org.apache.commons.lang3;StringUtils;false;stripEnd;;;Argument[0];ReturnValue;taint" ,
187
+ "org.apache.commons.lang3;StringUtils;false;stripStart;;;Argument[0];ReturnValue;taint" ,
188
+ "org.apache.commons.lang3;StringUtils;false;stripToEmpty;;;Argument;ReturnValue;taint" ,
189
+ "org.apache.commons.lang3;StringUtils;false;stripToNull;;;Argument;ReturnValue;taint" ,
190
+ "org.apache.commons.lang3;StringUtils;false;substring;;;Argument[0];ReturnValue;taint" ,
191
+ "org.apache.commons.lang3;StringUtils;false;substringAfter;;;Argument[0];ReturnValue;taint" ,
192
+ "org.apache.commons.lang3;StringUtils;false;substringAfterLast;;;Argument[0];ReturnValue;taint" ,
193
+ "org.apache.commons.lang3;StringUtils;false;substringBefore;;;Argument[0];ReturnValue;taint" ,
194
+ "org.apache.commons.lang3;StringUtils;false;substringBeforeLast;;;Argument[0];ReturnValue;taint" ,
195
+ "org.apache.commons.lang3;StringUtils;false;substringBetween;;;Argument[0];ReturnValue;taint" ,
196
+ "org.apache.commons.lang3;StringUtils;false;substringsBetween;;;Argument[0];ReturnValue;taint" ,
197
+ "org.apache.commons.lang3;StringUtils;false;swapCase;;;Argument;ReturnValue;taint" ,
198
+ "org.apache.commons.lang3;StringUtils;false;toCodePoints;;;Argument;ReturnValue;taint" ,
199
+ "org.apache.commons.lang3;StringUtils;false;toEncodedString;;;Argument[0];ReturnValue;taint" ,
200
+ "org.apache.commons.lang3;StringUtils;false;toRootLowerCase;;;Argument;ReturnValue;taint" ,
201
+ "org.apache.commons.lang3;StringUtils;false;toRootUpperCase;;;Argument;ReturnValue;taint" ,
202
+ "org.apache.commons.lang3;StringUtils;false;toString;;;Argument[0];ReturnValue;taint" ,
203
+ "org.apache.commons.lang3;StringUtils;false;trim;;;Argument;ReturnValue;taint" ,
204
+ "org.apache.commons.lang3;StringUtils;false;trimToEmpty;;;Argument;ReturnValue;taint" ,
205
+ "org.apache.commons.lang3;StringUtils;false;trimToNull;;;Argument;ReturnValue;taint" ,
206
+ "org.apache.commons.lang3;StringUtils;false;truncate;;;Argument[0];ReturnValue;taint" ,
207
+ "org.apache.commons.lang3;StringUtils;false;uncapitalize;;;Argument;ReturnValue;taint" ,
208
+ "org.apache.commons.lang3;StringUtils;false;unwrap;;;Argument[0];ReturnValue;taint" ,
209
+ "org.apache.commons.lang3;StringUtils;false;upperCase;(java.lang.String);;Argument;ReturnValue;taint" ,
210
+ "org.apache.commons.lang3;StringUtils;false;upperCase;(java.lang.String,java.util.Locale);;Argument[0];ReturnValue;taint" ,
211
+ "org.apache.commons.lang3;StringUtils;false;valueOf;;;Argument;ReturnValue;taint" ,
212
+ "org.apache.commons.lang3;StringUtils;false;wrap;(java.lang.String,char);;Argument[0];ReturnValue;taint" ,
213
+ "org.apache.commons.lang3;StringUtils;false;wrap;(java.lang.String,java.lang.String);;Argument;ReturnValue;taint" ,
214
+ "org.apache.commons.lang3;StringUtils;false;wrapIfMissing;(java.lang.String,char);;Argument[0];ReturnValue;taint" ,
215
+ "org.apache.commons.lang3;StringUtils;false;wrapIfMissing;(java.lang.String,java.lang.String);;Argument;ReturnValue;taint"
216
+ ]
125
217
}
126
218
}
127
219
0 commit comments