evaluate method

  1. @override
List<Fact> evaluate(
  1. Map<String, List<List<Object>>> facts,
  2. Map<String, List<List<Object>>> derived
)
override

Evaluates the rule and returns derived facts.

Implementation

@override
List<Fact> evaluate(
  Map<String, List<List<Object>>> facts,
  Map<String, List<List<Object>>> derived,
) {
  final result = <Fact>[];
  final assigns = facts['Assign'] ?? [];
  final tainted = getCombined('TaintedVar', facts, derived);

  for (final assign in assigns) {
    final target = assign[0];
    final from = assign[1];

    for (final t in tainted) {
      if (t[0] == from) {
        // Propagate taint: target inherits source and label from 'from'
        result.add(Fact('TaintedVar', [target, t[1], t[2]]));
      }
    }
  }

  return result;
}