Pull to refresh

Comments 19

Шот мну не понялло — в прошлый же раз уже был FreeBSD. Свежедобавленное, или просто по мере обработки лога и сабмита фиксов?
Можно ли как-то помечать конкретную строчку или блок кода (в комментарии), чтобы убрать для них предупреждение? В блоке «Прочитали статью и есть вопрос?» ответа не нашёл.)
Большое спасибо! Вспомнил, что я даже эту страницу читал, но совсем забыл… Избавился от одного предупреждения, которое сильно мозолило глаза.

И сразу есть вопрос, на этот раз с кодом:
V695 Range intersections are possible within conditional expressions. Example: if (A > 0 && A < 5) {… } else if (A > 3 && A < 9) {… }. Check lines: 39, 52. cyrillic.cpp 52
V695 Range intersections are possible within conditional expressions. Example: if (A > 0 && A < 5) {… } else if (A > 3 && A < 9) {… }. Check lines: 39, 54. cyrillic.cpp 54

И сам код, вызвавший предупреждение. В комментарии номер строки и числовое значение символа:
if( c >= L'а' && c <= L'я' ) /* 27 */ // 1072 — 1103
else if( c >= L'А' && c <= L'Я' ) /* 39 */ // 1040 — 1071
else if( c >= L'A' && c <= L'Z' ) /* 52 */ // 65 — 90
else if( c >= L'a' && c <= L'z' ) /* 54 */ // 97 -122

с — wchar_t из строки. 'A' русская и английская точно не перепутаны.
Не понимаю, почему подозрение на пересечение диапазонов?
Я знаю в чём причина, но объяснять техническую особенность почему так происходит с русскими буквами долго и особого смысла нет. Попробуем подумать, как поправить. В данном случае пока придётся подавить ложное предупреждение одним из доступных способов. Просим прощения за недоработку.
Хорошо. А то я уж испереживался, что опять не вижу косяка в трёх строчках. Спасибо.)
Эй! Самое интересное пропускаете!!!
Нельзя просто так взять и проверить PVS PVS'ом.
CWE-561 не является ошибкой. Если не определен INVARIANTS, то все пройдет как положено. Если же выполняется panic(), то вызывать SCTP_FREE() до нее, нецелесообразно, т.к. теряется возможность посмотреть содержимое структуры vrf.
Возможно. Но тогда это просто плохой код и было бы лучше написать что-то в духе:
#ifdef INVARIANTS
    panic("No memory for VRF:%d", vrf_id);
#esle
    SCTP_FREE(vrf, SCTP_M_VRF);
    return (NULL);
#endif

Нет, второй вариант тоже не верный, поскольку при определенных условиях можно продолжить работу ядра после вызова panic().

Жалко, что вы на автогенерённые статьи перешли (выглядит так будто эта статья ботом писана). Вот случай номер пять — это просто восхитительно, просто чудо что такая ошибка нашлась, причём предупреждение напрямую с ней не связано. Когда мой продукт такое находит, я прыгаю от радости. Живой человеческий комментарий по этому поводу украсил бы статью. А так эта ошибка теряется в серой череде обычных. Чем автоматически дампить все скучные баги в статью, лучше расскажите по-человечески про пару интересных :-)

Полноценные статьи как писались, так и будут писаться. Например, скоро выйдут большие статьи про CryEngine5 и PascalABCNET. А это просто дополнительный эксперементальный пятничный формат, призванный показать, что мы осваиваем работу с проблемами безопасности (CWE). Я даже её просто в наш блог положил, так как понимаю, что статья весьма незатейлива и может быть интересна в основном нашим постоянным читателям, которым интересно узнать, что мы ещё этакое нашли.
Уважаемый PVS-Studio, а вы не планируете предоставлять PVS-Studio как PVSSaaS по типу AppVeyor и подобных? И я бы с удовольствием бы нацепил на свои публичные репозитарии на GitHub ещё и ваш беджик :-):

image
Думаю, с подобными статьями не стоит частить на Хабре. Видимо иногда буду публиковать сразу некую подборку. А пока просто ссылка на продолжение сериала: Дефекты безопасности, которые устранила команда PVS-Studio на этой неделе: выпуск N3.

Sign up to leave a comment.