В чем разница между ошибками REVERSE_INULL и FORWARD_NULL при сканировании скрытности (статический анализ кода)?
Когда я запускаю сканирование покрытия кода Python (статический анализ кода), обнаруживаются ошибки REVERSE_INULL и FORWARD_NULL. Кто-нибудь может сказать, в чем разница между REVERSE_INULL и FORWARD_NULL? почему эти ошибки обнаружены.
1 ответ
REVERSE_INULL
означает, что у вас есть разыменование, сопровождаемое проверкой нулевого типа.
В псевдокоде
x := null
...
x.deref
...
if x is null
# handle null-type x
Исправление было бы поставить проверку нулевого типа перед разыменованием.
FORWARD_NULL
просто где есть путь для переменной с нулевым значением для разыменования. Еще один пример псевдокода
x := null
...
if x is null
print warning
# but x is still null
x.deref
Здесь вы должны убедиться, что нулевое значение всегда обрабатывается.
Так что в конечном итоге я бы сказал, что REVERSE_INULL
выполняет ту же проверку нулевого разыменования, что и FORWARD_NULL
но он дополнительно обнаруживает проверку после разыменования.
(стандартный отказ от ответственности - я работаю на Synopsys, но не на подразделение, производящее Coverity).