PVS-Studio corporate blog
Information Security
Open source
C++
C
Comments 6
0
Не нашел конструкции вида:
func(type *ptr){
int a= ptr;
}

Кривая попытка присвоить адрес встречалась в нескольких местах, компиляторы gcc 5.3.0 и vs2015 её не видели с максимальным уровнем предупреждений, cppcheck и pvs-studio их тоже не увидели.
После доработок cppcheck в codacity таки нашел только последнюю оставшуюся. Но я ее уже исправил в codeblock.
+2
Дело в том, что существовала (к сожалению) распространённая практика хранить указатели в int. Поэтому искать такое в старых С-программах дело неблагодарное, а в C++ это уже не скомпилируется. Впрочем, можно подумать, как сделать эту диагностику с приемлемым количеством ложных срабатываний.

Сейчас PVS-Studio ругается только 64-битной диагностикой, так как нехорошо запихивать указатель в int, обрезая старшие биты: V103: Implicit type conversion from memsize to 32-bit type.
+1

Вот вам парочка идей в тему статьи.


Проект OpenVPN недавно прошёл целых два аудита кода. Однако, энтузиасты всё ещё находят уязвимости:
https://guidovranken.wordpress.com/2017/06/21/the-openvpn-post-audit-bug-bonanza/


На днях вышла новая версия аудио-кодека Opus 1.2. И на странице релиза упомянуто, что они провели дополнительное тестирование безопасности, в т.ч. с использованием "фаззинга". При этом существенных уязвимостей обнаружено не было.
https://jmvalin.ca/opus/opus-1.2/

0
Как я понимаю, для найденных в OpenVPN уязвимостей статический анализ ничего не показал бы (и не показал, т.к. аудит выполнялся именно статическим анализом кода). Они так же были выявлены фаззингом.
0

Да, некоторые из описанных ошибок действительно не получилось бы найти статическим анализатором.
(Откуда ему знать, что для правильного освобождения памяти надо использовать GENERAL_NAMES_free, а не sk_GENERAL_NAME_free?)


Но некоторые выглядят вполне "по зубам" PVS-Studio. Например, отсутствие проверки возвращаемого значения ASN1_STRING_to_UTF8.
Или, скажем, вот это: tib_len = buf2[0x28];. Здесь buf2 имеет тип char. Т.е. значение tib_len может оказаться отрицательным, а оно дальше передаётся в memcpy.


Или PVS-Studio пока ещё не умеет data flow analysis?

0
Или PVS-Studio пока ещё не умеет data flow analysis?


Умеет. Ограничено. Впрочем, любой статический анализатор в той или иной степени умеет именно ограниченно.
Only those users with full accounts are able to leave comments. , please.