@@ -265,13 +265,72 @@ module ModelValidation {
265
265
)
266
266
}
267
267
268
+ private class DeprecatedSinkKind extends string {
269
+ DeprecatedSinkKind ( ) {
270
+ this =
271
+ [
272
+ "sql" , "url-redirect" , "xpath" , "ssti" , "logging" , "groovy" , "jexl" , "mvel" , "xslt" ,
273
+ "ldap" , "pending-intent-sent" , "intent-start" , "set-hostname-verifier" ,
274
+ "header-splitting" , "xss" , "write-file" , "create-file" , "read-file" , "open-url" ,
275
+ "jdbc-url"
276
+ ]
277
+ }
278
+
279
+ private string replacementKind ( ) {
280
+ this = "sql" and result = "\"sql-injection\""
281
+ or
282
+ this = "url-redirect" and result = "\"url-redirection\""
283
+ or
284
+ this = "xpath" and result = "\"xpath-injection\""
285
+ or
286
+ this = "ssti" and result = "\"template-injection\""
287
+ or
288
+ this = "logging" and result = "\"log-injection\""
289
+ or
290
+ this = "groovy" and result = "\"groovy-injection\""
291
+ or
292
+ this = "jexl" and result = "\"jexl-injection\""
293
+ or
294
+ this = "mvel" and result = "\"mvel-injection\""
295
+ or
296
+ this = "xslt" and result = "\"xslt-injection\""
297
+ or
298
+ this = "ldap" and result = "\"ldap-injection\""
299
+ or
300
+ this = "pending-intent-sent" and result = "\"pending-intents\""
301
+ or
302
+ this = "intent-start" and result = "\"intent-redirection\""
303
+ or
304
+ this = "set-hostname-verifier" and result = "\"hostname-verification\""
305
+ or
306
+ this = "header-splitting" and result = "\"response-splitting\""
307
+ or
308
+ this = "xss" and result = "\"html-injection\" or \"js-injection\""
309
+ or
310
+ this = "write-file" and result = "\"file-content-store\""
311
+ or
312
+ this = "create-file" and result = "\"path-injection\""
313
+ or
314
+ this = "read-file" and result = "\"path-injection\""
315
+ or
316
+ this = "open-url" and result = "\"request-forgery\""
317
+ or
318
+ this = "jdbc-url" and result = "\"request-forgery\""
319
+ }
320
+
321
+ string deprecationMessage ( ) {
322
+ result =
323
+ "The kind \"" + this + "\" is deprecated. Use " + this .replacementKind ( ) + " instead."
324
+ }
325
+ }
326
+
268
327
private string getInvalidModelKind ( ) {
269
328
exists ( string kind | summaryModel ( _, _, _, _, _, _, _, _, kind , _) |
270
329
not kind = [ "taint" , "value" ] and
271
330
result = "Invalid kind \"" + kind + "\" in summary model."
272
331
)
273
332
or
274
- exists ( string kind | sinkModel ( _, _, _, _, _, _, _, kind , _) |
333
+ exists ( string kind , string msg | sinkModel ( _, _, _, _, _, _, _, kind , _) |
275
334
not kind =
276
335
[
277
336
"request-forgery" , "jndi-injection" , "ldap-injection" , "sql-injection" , "log-injection" ,
@@ -283,7 +342,10 @@ module ModelValidation {
283
342
] and
284
343
not kind .matches ( "regex-use%" ) and
285
344
not kind .matches ( "qltest%" ) and
286
- result = "Invalid kind \"" + kind + "\" in sink model."
345
+ msg = "Invalid kind \"" + kind + "\" in sink model." and
346
+ if kind instanceof DeprecatedSinkKind
347
+ then result = msg + " " + kind .( DeprecatedSinkKind ) .deprecationMessage ( )
348
+ else result = msg
287
349
)
288
350
or
289
351
exists ( string kind | sourceModel ( _, _, _, _, _, _, _, kind , _) |
0 commit comments