Краткое описание технологий, используемых в инструменте PVS-Studio, которые позволяют эффективно обнаруживать большое количество паттернов ошибок и потенциальных уязвимостей. Статья описывает реализацию анализатора для С и C++ кода, однако приведённая информация справедлива и для модулей, отвечающих за анализ C# и Java кода.
Читать полностью »
Рубрика «статический анализ кода» - 7
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей
2018-11-21 в 8:28, admin, рубрики: C, c/c++, C#, c++, Data-Flow Analysis, java, Method Annotations, pattern-based analysis, pvs-studio, Symbolic Execution, Анализ потока данных, Аннотирование методов, Блог компании PVS-Studio, информационная безопасность, Компиляторы, Программирование, Си, Символьное выполнение, Сопоставление с шаблоном, статический анализ, статический анализ кодаNCBI Genome Workbench: научные исследования под угрозой
2018-11-20 в 7:06, admin, рубрики: bugs, C, c++, open source, pvs-studio, static code analysis, Блог компании PVS-Studio, Компиляторы, С++, статический анализ кодаСовременные компьютерные технологии, технические и программные решения — всё это сильно облегчает и ускоряет проведение различных научных исследований. Зачастую компьютерное моделирование — единственный способ проверки многих теорий. Научный софт имеет свои особенности. Например, такой софт зачастую подвергается очень тщательному тестированию, но слабо документирован. Тем не менее программное обеспечение пишется людьми, а люди допускают ошибки. Ошибки в научных программах могут ставить под сомнение целые исследования. В этой статье будут приведены десятки проблем, обнаруженных в коде пакета программ NCBI Genome Workbench.
Читать полностью »
Стековая машина на моноидах
2018-11-15 в 12:23, admin, рубрики: haskell, интерпретатор, математика, монада, моноид, полугруппа, Программирование, свободная алгебра, статический анализ кода, стековая машина, транслятор, функциональное программированиеНе так давно на Хабре появилась отличная и вдохновляющая статья про компиляторы и стековые машины. В ней показывается путь от простой реализации исполнителя байт-кода ко всё более и более эффективным версиям. Мне захотелось показать на примере разработки стековой машины, как это можно сделать Haskell-way.
На примере интерпретации языка для стековой машины мы увидим, как математическая концепция полугрупп и моноидов помогает разрабатывать и расширять архитектуру программы, как можно использовать алгебру моноидов и каким образом можно строить программы в форме набора гомоморфизмов между алгебраическими системами. В качестве рабочих примеров мы сначала построим интерпретатор, неотделимый от кода в виде EDSL, а потом научим его разным штукам: вести запись произвольной отладочной информации, отделять код программы от самой программы, проводить простой статический анализ и вычислять с различными эффектами.
Статья рассчитана на тех, кто владеет языком Haskell на среднем уровне и выше, на тех, кто его уже использует в работе или исследованиях и на всех любопытных, заглянувших поглядеть чего это функциональщики ещё понаворотили. Ну, и для тех, конечно, кого не испугал предыдущий абзац.
Какие ошибки прячутся в коде Infer.NET?
2018-11-12 в 11:21, admin, рубрики: .net, C#, Infer.NET, machine learning, microsoft, open source, pvs-studio, static code analysis, Блог компании PVS-Studio, машинное обучение, статический анализ кода
Публикация корпорацией Microsoft исходников своих проектов является вполне хорошим поводом для их проверки. Этот раз исключением не стал, и сегодня мы посмотрим на подозрительные места, найденные в коде Infer.NET. Долой аннотацию – ближе к делу!
Читать полностью »
Как я попробовал сделать статический анализатор GLSL (и что пошло не так)
2018-10-29 в 21:28, admin, рубрики: glsl, webassembly, WebGL, ненормальное программирование, статический анализ кода, упоротость и отвагаОднажды я готовился к Ludum Dare и сделал простую игру, где использовал пиксельные шейдеры (других в движок Phaser не завезли).
Шейдеры — это программы на си-подобном языке GLSL, которые выполняются на видеокарте. Есть два вида шейдеров, в этой статье речь идет про пиксельные (они же “фрагментные”, fragment shaders), которые очень грубо можно представить в таком виде:
color = pixelShader(x, y, ...other attributes)
Т.е. шейдер выполняется для каждого пикселя выводимого изображения, определяя или уточняя его цвет.
Вводную можно почитать на другой статье на хабре — https://habr.com/post/333002/
Потестировав, кинул ссылку другу, и получил от него вот такой скриншот с вопросом "а это нормально?"
Нет, это было ненормально. Посмотрев внимательно код шейдера, я обнаружил ошибку в вычислениях:
if (t < M) {
realColor = mix(color1,color2, pow(1. - t / R1, 0.5));
}
Т.к. константа R1 была меньше чем M, то в некоторых случаях в первом аргументе pow получалось число меньше нуля. Квадратный корень из отрицательного числа — штука загадочная, по крайней мере для стандарта GLSL. Мою видеокарту ничего не смутило, и она как-то выпуталась из этого положения (похоже, вернув из pow 0), а вот у друга она оказалась более разборчивой.
И тут я задумался: а могу ли я избежать таких проблем в будущем? От ошибок никто не застрахован, особенно таких, которые не воспроизводятся локально. Юнит-тесты на GLSL не напишешь. В то же время преобразования внутри шейдера довольно простые — умножения, деления, синусы, косинусы… Неужели нельзя отследить значения каждой переменной и убедиться, что ни при каких условиях не происходит выхода за допустимые границы значений?
Так я решил попробовать сделать статический анализ для GLSL. Что из этого получилось — можно прочитать под катом.
Сразу предупрежу: какого-то законченного продукта получить не удалось, только учебный прототип.
Как PVS-Studio оказался внимательнее, чем три с половиной программиста
2018-10-22 в 10:57, admin, рубрики: C, c++, code review, devops, DevSecOps, DevTools, pvs-studio, static code analysis, анализ кода, Блог компании PVS-Studio, обзор кода, ошибки в коде, поддержка, поддержка пользователей, поддержка разработчиков, Программирование, Си, статический анализ кодаPVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь оказался внимательнее нескольких человек.
Нам в поддержку написал пользователь, утверждая, что анализатор выдаёт сразу четыре ложных срабатывания на одну строчку кода. Письмо, написанное в поддержку, изначально попало к Евгению Рыжкову, который, бегло прочитав его и не заметив аномального в фидбеке, сразу переслал его ведущему разработчику Святославу Размыслову. Евгений не всматривался в код, так что будет честно посчитать его только за половину программиста :).
Читать полностью »
Статический анализ PHP-кода на примере PHPStan, Phan и Psalm
2018-10-16 в 15:34, admin, рубрики: open source, Phan, php, PHPStan, Psalm, Блог компании Badoo, Программирование, статический анализ кода
Компания Badoo существует уже более 12 лет. У нас очень много PHP-кода (миллионы строк) и наверняка даже сохранились строки, написанные 12 лет назад. У нас есть код, написанный ещё во времена PHP 4 и PHP 5. Мы выкладываем код два раза в день, и каждая выкладка содержит примерно 10—20 задач. Помимо этого, программисты могут выкладывать срочные патчи — небольшие изменения. И в день таких патчей у нас набирается пара десятков. В общем, наш код меняется очень активно.
Мы постоянно ищем возможности как для ускорения разработки, так и для повышения качества кода. И вот однажды мы решили внедрить статический анализ кода. Что из этого получилось, читайте под катом.
Читать полностью »
Третья проверка Qt 5 с помощью PVS-Studio
2018-10-15 в 13:58, admin, рубрики: c++, devops, DevSecOps, open source, pvs-studio, qt, qt5, Блог компании PVS-Studio, статический анализ кода
Время от времени наша команда повторно проверяет проекты, про которые мы уже писали статьи. Очередным таким перепроверенным проектом стал Qt. Последний раз мы проверяли его с помощью PVS-Studio в 2014 году. Начиная с 2014 года проект начал регулярно проверяться с помощью Coverity. Это интересно. Давайте посмотрим, удастся ли нам теперь найти какие-то интересные ошибки с помощью PVS-Studio.
Читать полностью »
Docotic.Pdf: Какие проблемы PVS-Studio обнаружит в зрелом проекте?
2018-10-08 в 19:24, admin, рубрики: .net, C#, pvs-studio, robots do it better, люблю "Даун Хаус", статический анализ кода
Качество для нас важно. И о PVS-Studio мы наслышаны. Все это привело к желанию проверить Docotic.Pdf и узнать, что еще можно улучшить.