Недавно мы написали статью Ради интереса: команда PVS-Studio придумала, как контролировать качество некоторых проектов с открытым исходным кодом. Теперь пришло время написать о найденных ошибках. Я не буду писать обо всех недостатках, которые замечаю, а только о тех, которые интересны. Моя цель — продвигать методологию статического анализа, а не описывать как можно больше предупреждений.
То, что мы имеем сегодня, — это простая типичная ошибка о бессмысленной проверке кода. PVS-Studio сообщает об этом так: V547: Выражение sad == NULL всегда ложно. screen_ops.c 1339.
static int area_dupli_invoke( bContext *C, wmOperator *op, const wmEvent *event) { ScrArea *area = CTX_wm_area(C); if (event && event->customdata) { sActionzoneData *sad = event->customdata; if (sad == NULL) { return OPERATOR_PASS_THROUGH; } area = sad->sa1; } .... }
Вложенное условие другого условия никогда не выполняется, так как этот указатель уже был проверен ранее. В результате функция никогда не вернет статус OPERATOR_PASS_THROUGH. Мне сложно сказать, насколько критичен этот баг. Впрочем, если авторы хотели вернуть этот статус, вряд ли они хотели, чтобы это был мертвый код :).