import csharp

class DataflowConfiguration extends DataFlow::Configuration
{
  DataflowConfiguration() { this="data flow configuration" }

  override predicate isSource(DataFlow::Node source) {
    source.asExpr().(Expr).getValue() = "tainted"
  }

  override predicate isSink(DataFlow::Node sink) {
    exists(LocalVariable v | sink.asExpr() = v.getInitializer())
  }
}

from DataflowConfiguration config, DataFlow::Node source, DataFlow::Node sink
where config.hasFlow(source, sink)
select source, sink
