Source SDK — набор утилит для создания модификаций на движке Source, разработанный корпорацией Valve. Исходные коды проекта были скачены и проверены ещё в конце 2013 года. На новогодних праздниках я планировал написать статью о результатах проверок. Но лень победила творчество, и я приступил к написанию статьи только когда вернулся на работу. Впрочем, я думаю, вряд ли за этот период что-то успело измениться в исходных кодах. Предлагаю вашему вниманию ознакомиться с подозрительными местами, которые я нашёл с помощью анализатора кода PVS-Studio.
Читать полностью »
Рубрика «ошибки в коде» - 8
Анализ проекта Source SDK
2014-01-16 в 8:37, admin, рубрики: bugs, c++, cppcat, game development, pvs-studio, Блог компании PVS-Studio, обзор кода, ошибки в коде, разработка игр, метки: bugs, c++, cppcat, pvs-studio, обзор кода, ошибки в коде, разработка игрВы все еще кипятите и сравниваете this с нулем?
2013-12-09 в 7:17, admin, рубрики: c plus plus, c++, Блог компании ABBYY, ошибки в коде, метки: c plus plus, c++, ошибки в кодеДавным-давно в далекой-далекой галактике широко использовалась библиотека MFC, в которой у ряда классов были методы, сравнивающие this с нулем. Примерно так:
class CWindow {
HWND handle;
HWND GetSafeHandle() const
{
return this == 0 ? 0 : handle;
}
};
«Это же не имеет смысла» – возразит читатель. Еще как «имеет»: этот код «позволяет» вызывать метод GetSafeHandle() через нулевой указатель CWindow*. Такой прием время от времени используется в разных проектах. Рассмотрим, почему на самом деле это плохая идея.
Читать полностью »
Продолжение проверки Geant4
2013-11-14 в 11:35, admin, рубрики: bugs, c++, CERN, copy-paste, pvs-studio, Блог компании PVS-Studio, ошибки в коде, Совершенный код, статический анализ кода, метки: bugs, c++, CERN, copy-paste, pvs-studio, ошибки в коде, Си, статический анализ кодаНаписал правильную статья про проверку проекта Geant4. Напомню предысторию. Недавно была проверена старая версия библиотеки Geant4 и написана статья "Copy-Paste и мюоны". Почему была проверена старая версия? Люди не совершенны. Суть оплошности можно узнать в предыдущей статье. Теперь же вашему вниманию предлагается краткий отчет о проверке Geant4 версии 10.0-beta.
Третья проверка кода проекта Chromium с помощью анализатора PVS-Studio
2013-08-13 в 6:02, admin, рубрики: c/c++, c++, chromium, Google Chrome, pvs-studio, Блог компании PVS-Studio, обзор кода, ошибки в коде, ошибки программистов, метки: c/c++, c++, chromium, pvs-studio, обзор кода, ошибки в коде, ошибки программистов Браузер Chromium очень быстро развивается. Например, когда в 2011 году мы впервые проверили этот проект (solution), он состоял из 473 проектов. Сейчас, он состоит уже из 1169 проектов. Нам было интересно, смогли ли разработчики Google сохранить высочайшее качество кода, при такой скорости развития Chromium. Да, смогли.
Читать полностью »
Мир опечаток и Copy-Paste
2013-06-27 в 8:40, admin, рубрики: c++, pvs-studio, Блог компании PVS-Studio, глупые ошибки, ошибки в коде, ошибки программистов, метки: c++, pvs-studio, глупые ошибки, ошибки в коде, ошибки программистов Программисты допускают невероятное количество опечаток, простых логических ляпов и делают ошибки благодаря Copy-Paste. Приглашаю отпробовать их. Приятного аппетита.
Программисты часто думают, что ошибки, отнимающие больше всего времени очень сложные и коварные. А простые ошибки они не делают.
Читать полностью »
«Однопоточный программист»
2013-05-27 в 9:36, admin, рубрики: Веб-разработка, заметки на полях, ошибки в коде, разработка, управление проектами, метки: заметки на полях, ошибки в коде, управление проектамиВсё нижеизложенное вымысел, основанный на реальных событиях.
Не являясь мастером писать заметки, пытался «с пылу с жару» изложить это вчера. Но просто и доступно выстроить мысли в стройном порядке «по горячим следам» не вышло.
Кроме того на личном опыте выяснилось, что описываемый подход, хоть он, на первый взгляд и кажется лично мне очень простым, статистически таким не является. Известное высказывание о том, что «простые вещи, они самые сложные» оказывается в данном случае верным.
«Практическое» применение данного подхода требует усилий и кропотливой работы над собой, до тех пор, пока он не станет безусловным рефлексом, пока допускаемая «неточность» не будет заметна ещё до её совершения.
Поэтому, споткнувшись об одну и ту же проблему в «надцатый» раз, и в «надцатый» же раз наблюдая идентичное её решение, полагаю, что изложение данного «подхода» в письменном виде поможет мне ещё прочней закрепить его как «навык».
В связи с чем, публикуя эту заметку здесь, ожидаю, что вторым «застреленным зайцем» может стать помощь кому-нибудь ещё в избавлении от подобных ситуаций.
Ещё один способ отстрелить себе ногу в Perl
2013-02-06 в 17:32, admin, рубрики: perl, ошибки в коде, Программирование, метки: perl, ошибки в кодеПосмотрим на код:
use strict;
use warnings;
sub mysub($$)
{
my ($a, $b) = @_;
print "$an";
print "$bn";
}
my $x = undef;
mysub($x && $x->[0] =~ /abc/, $x = []);
Может ли mysub в качестве первого аргумента получить нечто, что в boolean контексте является истинной?
Читать полностью »
Исследование отношения популярных языков программирования к случайным ошибкам
2012-12-09 в 15:25, admin, рубрики: опечатки, ошибки в коде, ошибки программистов, метки: опечатки, ошибки в коде, ошибки программистовГруппа греческих учёных под руководством Диомидиса Спинеллиса провела интересное исследование чувствительности десяти популярных языков программирования к ошибкам и опечаткам при наборе текста программы. Ущерб от таких ошибок иногда может составлять многие миллионы, и способность языка обнаруживать их как можно раньше очень важна для разработки надёжных программ. Для тестирования использовались несколько примеров из проекта Rosetta Code — вики, на которой собраны реализации множества задач и алгоритмов на разных языках. На основании статистических данных о популярности языков, а так же некоторых практических соображений (наличие свободного компилятора и примеров на Rosetta Code) были выбраны следующие языки и компиляторы:
Язык | компилятор/среда |
C | gcc 4.4.5 |
C++ | g++ 4.4.5 |
C# | mono 2.6.7, CLI v2.0 |
Haskell | ghc 6.12.1 |
Java | OpenJDK 1.6.0_18 |
JavaScript | spidermonkey 1.8.0 |
PHP | PHP 5.3.3-7 |
Perl | perl 5.10.1 |
Python | python 2.6.6 |
Ruby | ruby 1.8.7 |
«DELETE FROM users» — как застраховать себя от подобных стейтментов в MySQL
2012-11-18 в 17:18, admin, рубрики: mysql, ошибки в коде, метки: mysql, ошибки в кодеКогда в очередной раз, пытаясь изменить пароль одного из пользователей или вручную поправить поле какой-нибудь одной записи, забываешь ввести WHERE, ты обеспечиваешь себе не только тонну кирпичей, но и незабываемый экспириенс по восстановлению бекапов.
На днях наткнулся на метод, который поможет застраховаться от подобных случаев:
В «юморном» варианте опция запуска MySQL должна быть: --i-am-a-dummy
mysql --i-am-a-dummy -uroot test
В «серьезном» варианте: --safe-updates
mysql --safe-updates -uroot test
dev.mysql.com/doc/refman/4.1/en/mysql-tips.html
Обеспечивает запрет исполнения UPDATE или DELETE FROM, если не указано WHERE или LIMIT.
Во всём виноват компилятор
2012-09-06 в 6:38, admin, рубрики: c++, Компиляторы, ошибки в коде, ошибки программистов, Си, метки: c++, компиляторы, ошибки в коде, ошибки программистов, Си Многие программисты очень любят обвинять компилятор в различных ошибках. Поговорим немного об этом.
Читать полностью »