Я экспериментирую со статическим анализатором clang, и я нашел следующий пример, где он пропускает возможное деление на ноль:
#include <stdio.h>
int k = 300;
char *parse_mailpath_spec (char *str)
{
char *s;
int pass_next;
for (s = str, pass_next = 0; s && *s; s++)
{
if (pass_next == 4)
{
int j = 0;
k = 5 / j;
}
if (*s == '\\')
{
pass_next++;
continue;
}
if (*s == '?' || *s == '%')
{
return s;
}
}
return ((char *)NULL);
}
int main(int argc, char **argv)
{
if (parse_mailpath_spec(argv[1])) return 0;
else return -1;
}
Если я изменю if (pass_next == 4)
на if (pass_next == 3)
, то анализатор находит ошибку и сообщает о делении на ноль .Думаю, я был слишком наивен, думая, что анализатор не остановится, если не докажет, что программа безопасна (?)