spamsink: (lenin)
[personal profile] spamsink

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

Ну и попробовал на свою голову (ниже псевдокод, демонстрирующий проблему, цветом выделены комментарии Coverity):
char* sName = strdup(что-то);
char* sTempName = NULL;
while (...) {
Assigning: "sTempName" = "sName". Now both point to the same storage.
    sTempName = sName ;
    if (...) {
        sName = strdup(что-то ещё);
    }
    ...
At conditional: "sTempName != sName" taking the true branch.
    if (sTempName != sName) {
"free" frees parameter "sTempName".
        free(sTempName);
    }
}
Using freed pointer "sName".
return sName;


Ну не зайки?

Upd: --enable-constraint-fpp

Date: 2013-02-08 05:02 am (UTC)
From: [identity profile] yatur.livejournal.com
Зайки-то, может, и зайки, но такой код, даже если он прямо сейчас работает нормально, зело чреват глюками при любом изменении. Ну неужели там все настолько критично по производительности, что пользоваться std::string запрещает жаба?

Date: 2013-02-08 05:23 am (UTC)
From: [identity profile] rezkiy.livejournal.com
мы будучи стартапом на прошлой неделе рассматривали Coverity и решили пока бзе него обойтись. В частности потому что 1) очень уж дорого 2) не похоже чтобы оно было намного сильнее майкрософтовского Префаста при наличии аннотаций. Без аннотаций оба много ругаются не по делу и не ругаются по делу.

Date: 2013-02-08 06:01 am (UTC)
From: [identity profile] rezkiy.livejournal.com
Язык С примерно один и тот же, неделька издевательства над хедерами -- и ваш код компилируется вижал студией. Не факт конечно же что линкуется, но анализатору много не надо.

Date: 2013-02-08 07:21 am (UTC)
From: [identity profile] fatoff.livejournal.com
Это есть было фоновой активностью в одной силиконовой компании тут у инженегров года полтора назад: гонять Коверити И вставлять в базу данных исключения на все матерки не имеющие отношения К. Гугл их заставил это делать, в попытке стандартизовать хардверную часть Андроида.

Date: 2013-02-08 03:41 pm (UTC)
From: [identity profile] sab123.livejournal.com
+1, оно - редкое говнище

Date: 2013-02-09 08:35 am (UTC)
From: [identity profile] dbhost.livejournal.com
PC-Lint, если Вы работаете под виндой, используя кросс-компиляцию.
Если нет, то, по идее, Вам должен подойти FlexeLint. Но я им никогда не использовал, поэтому ничего про него не скажу.
Edited Date: 2013-02-09 08:36 am (UTC)

Date: 2013-02-09 04:35 pm (UTC)
From: [identity profile] sab123.livejournal.com
Вообще не пользоваться анализаторами?

Date: 2013-02-10 12:16 am (UTC)
From: [identity profile] sab123.livejournal.com
Так они все равно ничего не находят.

Date: 2013-02-09 05:54 am (UTC)
stas: (Default)
From: [personal profile] stas
Все эти человекоподобные роботы одним миром мазаны. Глупые ошибки (которые ещё как бывают, что греха таить) они находят, а если код чуть сложнее - начинают галлюцинировать.

Date: 2013-02-09 07:47 am (UTC)
From: [identity profile] dbhost.livejournal.com
2 и 4 могут быть по делу, если понять что у вас в первом if-e
1 и 3 - бред, да

Date: 2013-02-09 09:01 am (UTC)
From: [identity profile] dbhost.livejournal.com
по-моему, здесь либо опущены важные части для понимания, либо Coverity совсем плох.
например, 4-й коммент обоснован только, если при вызове free() sTempName == sName, что по коду не так.

кстати, а "полезные" констатации фактов можно отключать из выдачи?

Date: 2013-02-11 04:57 am (UTC)
From: [identity profile] dbhost.livejournal.com
я имел ввиду можно ли подавлять отдельные ворнинги и целые классы сообщений как в линте с помощью комментариев или конфигураций.
но вижу, что похоже, можно.
Page generated Mar. 4th, 2026 11:23 pm
Powered by Dreamwidth Studios