Анализатор обнаружил нарушение ограничений, наложенных пользователем на параметр функции.
Механизм пользовательских аннотаций в формате JSON позволяет предоставить анализатору больше информации о типах и функциях. В том числе, позволяет установить ограничения на параметры аннотируемой функции.
Например, если вы хотите, чтобы анализатор сообщал вам, когда в функцию передаётся отрицательное значение или ноль, то ваша аннотация может выглядеть так:
{ "version": 1, "annotations": [ { "type": "function", "name": "my_constrained_function", "params": [ { "type": "int", "constraint": { "disallowed": [ "..0" ] } } ] } ] }
При подключении файла с такой аннотацией на следующем коде появится срабатывание V1108:
void my_constrained_function(int); void caller(int i) { if (i < 0) { return; } my_constrained_function(i); // <= }
В данном случае программист совершил ошибку — перепутал оператор '<' с оператором '<='. Однако благодаря ограничениям в аннотации анализатор знает, что в функцию 'my_constrained_function' не должны передаваться отрицательные значения или ноль.
Исправленный код:
void my_constrained_function(int); void caller(int i) { if (i <= 0) { return; } my_constrained_function(i); }