Флаги в аргументах функций
process(true, false);Эта функция, судя по названию, что-то обрабатывает (process). Но что означают параметры? Какой параметр здесь true, а какой false? По вызывающему коду об этом нельзя судить.
Нам придется заглянуть в объявление функции, которое дает подсказку:
void process(bool withValidation,
bool withNewEngine);Очевидно, автор использует два параметра типа bool как флаги (toggles). Реализация функции может быть похожа на это:
void process(bool withValidation,
bool withNewEngine)
{
if (withValidation) // используется 1-й флаг
validate(); // % подтвердить
do_something_toggle_independent_1
if (withNewEngine) // используется 2-й флаг
do_something_new();
else
do_something_old();
do_something_toggle_independent_2();
}Назначение флагов очевидно, поскольку каждый из них имеет осмысленное название. Проблема возникает в вызывающем коде.





Мы завершаем цикл статей, посвященных рекомендациям по написанию качественного кода на примере ошибок, найденных в проекте Chromium. После написания 6 статей, у нас всё ещё остаётся много нерассмотренных ошибок. Эти ошибки разнородны и про них сложно составить материал на определённую тему. Поэтому в этой седьмой статье будут просто выбраны и рассмотрены наиболее интересные дефекты.
Предлагаем вашему вниманию цикл статей, посвященных рекомендациям по написанию качественного кода на примере ошибок, найденных в проекте Chromium. Это пятая часть, которая будет посвящена ошибкам использования непроверенных или неправильно проверенных данных. Очень большое количество уязвимостей существуют благодаря как раз использованию непроверенных данных, что делает данную тему интересной и актуальной.

