Comments 6
func(type *ptr){
int a= ptr;
}
Кривая попытка присвоить адрес встречалась в нескольких местах, компиляторы gcc 5.3.0 и vs2015 её не видели с максимальным уровнем предупреждений, cppcheck и pvs-studio их тоже не увидели.
После доработок cppcheck в codacity таки нашел только последнюю оставшуюся. Но я ее уже исправил в codeblock.
Сейчас PVS-Studio ругается только 64-битной диагностикой, так как нехорошо запихивать указатель в int, обрезая старшие биты: V103: Implicit type conversion from memsize to 32-bit type.
Вот вам парочка идей в тему статьи.
Проект OpenVPN недавно прошёл целых два аудита кода. Однако, энтузиасты всё ещё находят уязвимости:
https://guidovranken.wordpress.com/2017/06/21/the-openvpn-post-audit-bug-bonanza/
На днях вышла новая версия аудио-кодека Opus 1.2. И на странице релиза упомянуто, что они провели дополнительное тестирование безопасности, в т.ч. с использованием "фаззинга". При этом существенных уязвимостей обнаружено не было.
https://jmvalin.ca/opus/opus-1.2/
Да, некоторые из описанных ошибок действительно не получилось бы найти статическим анализатором.
(Откуда ему знать, что для правильного освобождения памяти надо использовать 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?
Как PVS-Studio может помочь в поиске уязвимостей?