Pull to refresh

Comments 17

А зачем там вообще: if (verb == null)…?
В чём сакральный смысл вызывать HelpVerbOptionAttribute.InvokeMethod() с разными значениями параметра verb в зависимости от его же самого?
На этот вопрос ответа у меня нет. :)

P.S. Про сакральные смыслы — это ещё пустяки. В библиотеках .NET Core встречались куда более интересные места. Вот там действительно сидишь и думаешь, а в чём здесь скрытый смысл… Впрочем, это тема другой статьи, не будем забегать вперёд.
Смысла нет, но могу предположить что в какой-то версии вызывались разные методы или с разными аргументами. После рефакторинга остался один метод с такой странной логикой.
Ну, это как идея, чтобы оправдать автора библиотеки :)
Если уж первый С++ компилятор был написан на С++, то, почему-бы, PVS не анализировать исходный код PVS :)
Занимаемся этим на регулярной основе :)
Я не знаток истории, но объясните мне, как ПЕРВЫЙ C++ компилятор мог быть написан на C++?
Короткий ответ: макросы препроцессора языка С (и не сравниваем современный С++ с его первой версией, разумеется)
Длинный овтет: есть «биографическая» книжка Страуструпа «Дизайн и эволюция языка С++». Очень интересная.
В PVS-Studio_Cmd (а также некоторых других утилитах) мы используем специальную библиотеку для разбора аргументов командной строки — CommandLine.

Тут вспомился анекдот:
Экскурсовод: А сейчас мы проезжаем мимо публичного дома…
Экскурсант: А почему???
А интересно, возможна ли такая ошибка, из-за наличия которой PVS-Studio пропустит (не найдёт) эту же самую ошибку в своем коде?
Теоретически, думаю, такая ситуация возможна.

Сходу могу придумать такой синтетический пример.

Возьмём, например, диагностику V3004 (then и else ветви оператора if имеют идентичные тела). Естественно, что диагностика содержит различные проверки. В частности, нам нет смысла анализировать код, если оператор if не имеет else-ветви. Допустим, есть проверка подобного вида.
if (ifStatement.Else == null)
  return;
.... // Дальнейшая логика по определению ошибки

Соответственно, ошибка, выявляемая V3004, в данном случае будет выглядеть как:
if (ifStatement.Else == null)
  return; // <=
else
  return; // <=
.... // Дальнейшая логика по определению ошибки

В таком случае получится как раз ситуация, которую мы хотели бы найти, и которая не будет найдена такой диагностикой — из-за безусловного выхода дальнейшая логика поиска ошибки выполнена не будет. Следовательно, диагностика не сможет найти ошибку в своём же коде, которую должна была бы найти, если бы этой ошибки не содержала.

Пример, конечно, синтетический, но на вопрос ответить должен. :)
Но на практике есть юнит-тесты, которые сразу выявят, что диагностика не работает должным образом :). Мы всегда за комплексное использование разных методологий. При разработке PVS-Studio используется статические анализаторы кода, обзоры кода, юнит-тесты, динамические анализаторы, регрессионные тесты, UI тесты.
Библиотека то неплохая, вы завели там issue?
Issue не заводил. Уже с десяток релизов прошло, актуальна ли проблема на последней доступной версии — вопрос. Не проверял.
Как у вас с ложными срабатываниями? Недавно клиент анализировал наш код в Checkmarx, вывалило под 1000 уязвимостей, из них реальных багов 3-4 и потенциальных с десяток.
Мы используем годами вылизанную libjpeg, только в ней он нашел полторы сотни ошибок.

Так что, вы подключаемые либы не прогоняете перед использованием?

Sign up to leave a comment.