Оповещение о проверке во время выполнения Polyspace с функцией C open () - PullRequest
0 голосов
/ 15 ноября 2018

Сначала рассмотрим следующий фрагмент кода (статическая функция, вызываемая один раз из main ()):

#define SYSFS_GPIO_DIR                          "/sys/class/gpio"
#define MAX_BUF                                 ((UI_8)64)

typedef uint8_t UI_8
typedef int32_t SI_32
typedef char CHAR_8

static SI_32 ImuGpioFdOpen(UI_8 gpio)
{
    SI_32 fd_gpio_open = -1;
    SI_32 byte_count = -1;
    CHAR_8 aux_buf[MAX_BUF] = {'\0'};

    byte_count = snprintf(aux_buf, sizeof(aux_buf), SYSFS_GPIO_DIR "/gpio%d/value", gpio);
    if((byte_count > 0) && (byte_count < sizeof(aux_buf))){
        fd_gpio_open = open(aux_buf, O_RDONLY | O_NONBLOCK );
        if(fd_gpio_open < 0){
            syslog (LOG_ERR,"gpio/fd_open");
            fd_gpio_open = ERROR;
        }
    }

    return fd_gpio_open;
}/*ImuGpioFdOpen*/

При вызове open () повышается статический анализ с использованием Polyspace Code Prover и появляется предупреждение«Dir 4.1 MISRA: ошибки во время работы должны быть сведены к минимуму».В предупреждениях говорится, что «первый аргумент (путь к файлу) может быть недопустимой строкой»

Кажется, мы не очень хорошо понимаем директиву, потому что все наши усилия по устранению подобных предупреждений (у нас естьнесколько похожих) не дают результатов.Я имею в виду, что мы явно не строим строку правильно, но поскольку программа компилируется и работает правильно, мы в замешательстве.

Какой тип проверки во время выполнения нам не хватает?

Спасибо!

РЕДАКТИРОВАТЬ: я забыл упомянуть, что передача строкового литерала, кажется, работает для Polyspace, но это не работает, если мы пытаемся передать строку, сгенерированную во время выполнения (как в коде).Может быть, потому, что прототип open () объявляет, что первым аргументом является const char *, а Polyspace воспринимает это слишком серьезно?

1 Ответ

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

Эта проблема была оценена как ложно-положительная.Предупреждения должны быть соответствующим образом обоснованы.

Спасибо!

...