@@ -168,24 +168,32 @@ class TypeConstraintValidatorContext extends RefType {
168168 }
169169 }
170170
171- predicate isSource ( DataFlow:: Node source ) {
172- /* TODO describe source */
173- //source.asExpr() instanceof StringLiteral
174- //source = ConstraintValidator.getParameter(0)
175- //source instanceof RemoteFlowSource
176- //ConstraintValidator = source.asExpr().hasQualifiedName("javax.validation", "ConstraintValidator")
171+ class MyTaintTrackingConfig extends TaintTracking:: Configuration {
172+ MyTaintTrackingConfig ( ) { this = "MyTaintTrackingConfig" }
177173
178- source instanceof BeanValidationSource
179- }
174+ override predicate isSource ( DataFlow:: Node source ) {
175+ /* TODO describe source */
176+ //source.asExpr() instanceof StringLiteral
177+ //source = ConstraintValidator.getParameter(0)
178+ //source instanceof RemoteFlowSource
179+ //ConstraintValidator = source.asExpr().hasQualifiedName("javax.validation", "ConstraintValidator")
180180
181- /* Step 1.2 */
182- predicate isSink ( DataFlow:: Node sink ) {
183- exists ( MethodAccess ma |
184- ma .getMethod ( ) instanceof BuildConstraintViolationWithTemplateMethod and
185- sink .asExpr ( ) = ma .getArgument ( 0 )
186- )
181+ source instanceof BeanValidationSource
182+ }
183+
184+ /* Step 1.2 */
185+ override predicate isSink ( DataFlow:: Node sink ) {
186+ exists ( MethodAccess ma |
187+ ma .getMethod ( ) instanceof BuildConstraintViolationWithTemplateMethod and
188+ sink .asExpr ( ) = ma .getArgument ( 0 )
189+ )
190+ }
187191}
188192
193+ from MyTaintTrackingConfig cfg , DataFlow:: PathNode source , DataFlow:: PathNode sink
194+ where cfg .hasFlowPath ( source , sink )
195+ select sink , source , sink , "Custom constraint error message contains unsanitized user data"
196+
189197// from Method method, MethodAccess call
190198// where
191199// call.getMethod() = method and
0 commit comments