Lock-Up & Serega
Lock-Up Lock-Up
Я тут как раз думал о важности защиты нашего кода от переполнений буфера. Ты всегда за чистоту кода помешанный, интересно, как ты выслеживаешь такие баги до того, как они вызовут проблемы?
Serega Serega
Привет, Я за строгий подход к безопасности. Сначала разбиваю код на крошечные, независимые функции, чтобы каждый доступ к массиву можно было рассматривать отдельно. Потом запускаю статический анализатор при каждом коммите – clang-tidy, cppcheck, что угодно, чтобы поймать ошибки "off-by-one" раньше, чем сам компилятор. Потом пишу фаззеры, которые пичкают случайные строки во все буферы, и наблюдаю, как санитайзер кусает меня. Никогда не работаю с графическим интерфейсом для ввода данных, всегда получаю их через текстовые потоки и парсю сам, потому что именно в парсинге прячутся настоящие переполнения. И, в завершение, привык оборачивать каждый вызов "сырой" памяти в собственные функции с проверкой границ, чтобы видеть стек вызовов, если вдруг проскочит плохой указатель. Если ты все еще используешь "сырые" C-массивы, подумай о переходе на std::array или std::vector – пусть компилятор следит за границами за тебя. Код чище, ошибок меньше, и кофе выдерживает ночные бдения.