Вдруг невозможное возможно?
Feb. 7th, 2013 08:44 pmДорвался, наконец, до 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
no subject
Date: 2013-02-08 05:02 am (UTC)no subject
Date: 2013-02-08 05:09 am (UTC)Ценен тем, что работает, за исключением редких случаев ошибок, сжирания памяти и квадратичной временной сложности, весьма быстро и неплохо, и по набору фич не знает равных. Кто и когда будет озадачен его приведением в порядок, мы еще не придумали.
no subject
Date: 2013-02-08 05:23 am (UTC)no subject
Date: 2013-02-08 05:40 am (UTC)Справедливости ради замечу, что были найдены и реальные ошибки типа возвращения .c_str() от локальной строки.
no subject
Date: 2013-02-08 06:01 am (UTC)no subject
Date: 2013-02-08 06:27 am (UTC)no subject
Date: 2013-02-08 07:21 am (UTC)no subject
Date: 2013-02-08 07:38 am (UTC)no subject
Date: 2013-02-08 03:41 pm (UTC)no subject
Date: 2013-02-09 07:15 am (UTC)no subject
Date: 2013-02-09 07:45 am (UTC)no subject
Date: 2013-02-09 07:52 am (UTC)no subject
Date: 2013-02-09 08:35 am (UTC)Если нет, то, по идее, Вам должен подойти FlexeLint. Но я им никогда не использовал, поэтому ничего про него не скажу.
no subject
Date: 2013-02-09 08:50 am (UTC)no subject
Date: 2013-02-09 04:35 pm (UTC)no subject
Date: 2013-02-09 11:12 pm (UTC)no subject
Date: 2013-02-10 12:16 am (UTC)no subject
Date: 2013-02-10 01:14 am (UTC)no subject
Date: 2013-02-09 05:54 am (UTC)no subject
Date: 2013-02-09 07:14 am (UTC)no subject
Date: 2013-02-09 07:47 am (UTC)1 и 3 - бред, да
no subject
Date: 2013-02-09 08:01 am (UTC)К сожалению, я забыл, какое именно ветвление предполагалось в первом if-e; но в любом случае получается смешно.
no subject
Date: 2013-02-09 09:01 am (UTC)например, 4-й коммент обоснован только, если при вызове free() sTempName == sName, что по коду не так.
кстати, а "полезные" констатации фактов можно отключать из выдачи?
no subject
Date: 2013-02-10 01:17 am (UTC)4-й коммент обоснован только, если при вызове free() sTempName == sName, что по коду не так
Мой пост именно об этом. :)
кстати, а "полезные" констатации фактов можно отключать из выдачи?
Не понял вопроса.
no subject
Date: 2013-02-11 04:57 am (UTC)но вижу, что похоже, можно.
no subject
Date: 2013-02-11 05:41 am (UTC)Можно ли сделать указание подавить ворнинг с помощью комментария в коде, и если да, то как, я еще не выяснил.