Небольшой постскриптум по итогам докладов и общения.
Первое. Обсуждалась тема доверенных компиляторов, и меня просили подсказать номер стандарта. Вот он: ГОСТ Р 71206-2024 «Защита информации. Разработка безопасного программного обеспечения. Безопасный компилятор языков С/С++. Общие требования». Примеры компиляторов: SAFEC (на основе GCC) и Safelang (на основе Clang). Подробнее.
Второе. Я говорил, что в презентацию вкралась опечатка — там, где я рассматривал ошибку в функции сравнения. Мне не давал этот момент покоя, т.к. я не понимал, почему там такой код, хотя я вроде его не правил имена переменных и не перенабирал что-то. В общем, сейчас посмотрел и разобрался. Я допустил сopy-paste ошибку :)
Я запутался в двух похожих фрагментах с ошибками и скрестил их в презентации :)
Итак, на самом деле в нашей коллекции ошибок выписаны два разных случая:
Проект IronPython. Предупреждение PVS-Studio: V3021 There are two 'if' statements with identical conditional expressions. The first 'if' statement contains method return. This means that the second 'if' statement is senseless. SourceLocation.cs 156
public static int Compare(SourceLocation left,
SourceLocation right) {
if (left < right) return -1;
if (right > left) return 1;
return 0;
}
Здесь как раз местами поменяны операнды и изменён оператор сравнения на противоположный. В результате два условия на самом деле оказались идентичными.
Рассмотренный пример смешался с этим:
Проект Samba. Предупреждение PVS-Studio: V501 There are identical sub-expressions to the left and to the right of the '>' operator: i2->pid > i2->pid brlock.c 1901
static int compare_procids(const void *p1, const void *p2)
{
const struct server_id *i1 = (struct server_id *)p1;
const struct server_id *i2 = (struct server_id *)p2;
if (i1->pid < i2->pid) return -1;
if (i2->pid > i2->pid) return 1;
return 0;
}
Код похожий, но здесь другой тип ошибки. Переменная сравнивается сама с собой: i2->pid > i2->pid.
Никто не защищён от опечаток и сopy-paste ошибок. Даже я :) Используйте статический анализатор кода PVS-Studio как дополнительную пару глаз для обзоров кода :)
Третье. Условия получения бесплатных вариантов лицензий PVS-Studio:
- Бесплатное использование PVS-Studio студентами и преподавателями.
- Бесплатная лицензия PVS-Studio для Open Source.
