Одинаковый код во взаимоисключаемых ветках ветвления кода
Дублируются блоки в разных ветках оператора "Если", оператора Попытка...Исключение и условного оператора "?"
Часто это является последствиями неверного или незаконченного "копипаста".
Примеры неверных условий
Если ПервоеУсловие() Тогда
ВызовФункции("Строка", 10); // ошибка
ИначеЕсли ВтороеУсловие() Тогда
ВызовФункции("Строка", 10); // ошибка
КонецЕсли;
или
Попытка
ДругаяФункция(); // ошибка
Исключение
ДругаяФункция(); // ошибка
КонецПопытки;
или
Выражение = ?(Условие, А + 2, А+2); // ошибка
или более сложный вариант дублирования
Если ПервоеУсловие() Тогда
ДругаяФункция(); // ошибка
ИначеЕсли ВтороеУсловие() Тогда
А = ВызовФункции(ВложенныйВызов("Строка", 1)); // ошибка
ИначеЕсли ТретьеУсловие() Тогда
ДругаяФункция(); // ошибка
Иначе
А = ВызовФункции(ВложенныйВызов("Строка", 1)); // ошибка
КонецЕсли;
Согласно Common Weakness Enumeration потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как - CWE-570 - CWE-571
См. также
- Правило Совпадающие/одинаковые тела методов
- Правило Дублирование одинаковых/похожих блоков кода
- Правило Одинаковые условия в последовательности вида "Если (....) ИначеЕсли (....) ИначеЕсли (....)".
- MSC12-C. Detect and remove code that has no effect or is never executed
- MITRE, CWE-489 - Leftover Debug Code
- MITRE, CWE-570 - Expression is Always False
- MITRE, CWE-571 - Expression is Always True
- MISRA C:2004, 13.7 - Boolean operations whose results are invariant shall not be permitted.
- MISRA C:2012, 14.3 - Controlling expressions shall not be invariant
Экранирование кода
// sonar:EqualBlock:off
// sonar:EqualBlock:on