Polyspace предупреждает об использовании системных флагов параметров для системных функций - PullRequest
0 голосов
/ 19 ноября 2018

Я работаю с Polyspace Code Prover и Bug Finder, чтобы выполнить статический анализ моего приложения Linux, написанного на C.

Мы получаем несколько предупреждений об использовании флагов, как определено на страницах «man» упомянутых вызовов. В справочных страницах функций, таких как open (), write () или syslog (), мы можем видеть, что у них есть параметр, который мы можем передать как ИЛИ нескольких флагов, определенных интерфейсом, как в следующем примере:

fd_value = shm_open(shm_key, O_CREAT | O_RDWR | O_EXCL , S_IRWXU);

Polyspace жалуется, что в приведенном выше примере флаги O_CREAT, O_RDWR и O_EXCL относятся к разным основным типам (некоторые без знака, некоторые со знаком), и поэтому такая операция ИЛИ не рекомендуется. Это верно в соответствии с рекомендациями MISRA 10.1, но если это то, как система определяет свой API и его значения, что я могу с этим поделать? Мне кажется, что приводить значения, чтобы сделать инструмент счастливым, рискованно.

Есть ли другой способ обойти проблему, кроме оправдания этих нарушений?

Спасибо, с наилучшими пожеланиями!

1 Ответ

0 голосов
/ 20 ноября 2018

Несколько странно, что эти значения определены с разным значением. Это может быть хорошей идеей добавить слой изоляции платформы, который переопределит эти константы в константы, специфичные для модуля, выполняя необходимые приведения и, возможно, имея дело с межплатформенными различиями.

typedef int t_my_shm_open_flags;

#if(defined(PLATFORM1))
#define MY_SHM_OPEN_FLAG_CREATE     ((t_my_shm_open_flags) O_CREAT)
#define MY_SHM_OPEN_FLAG_READ_WRITE ((t_my_shm_open_flags) O_RDWR)
#define MY_SHM_OPEN_FLAG_EXCLUSIVE  ((t_my_shm_open_flags) O_EXCL)
#else
/* error for unsupported platform */
#endif

#define MY_SHM_OPEN_DEFAULT_FLAGS (MY_SHM_OPEN_FLAG_CREATE | MY_SHM_OPEN_FLAG_READ_WRITE | MY_SHM_OPEN_FLAG_EXCLUSIVE)
...