Предполагается, что следующий код уязвим для атаки TOCTOU:
public Period(final Date start, final Date end) {
if (start.compare(end) > 0) {
throw new IllegalArgumentException("");
}
this.start = start;
this.end = end; // Class period has 2 private final member
// variables Date start & end.
}
Чего я не понимаю, так это того, как будет работать это состояние гонки? Скажем, есть 2 потока T1 и T2, где T1 имеет допустимый набор аргументов и должен пройти проверку, а T2 — хакер, который хочет установить недопустимые значения в классе.
Если 2 потока соревнуются, и этот фрагмент кода является нашей критической секцией, то, скажем, T1 работает, проходит проверку и спит. Теперь, когда T2 запустится, не будет ли он снова проходить проверку (и терпеть неудачу)??