Polyspace 运行-使用 C open() 函数的时间检查警报
Polyspace Run-time check alert with C open() function
首先,请考虑以下代码(从 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] = {'[=11=]'};
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 进行静态分析会引发有关 MISRA "Dir 4.1 Run-time failures shall be minimized" 的警报。警报说:"first argument (file path) may not be a valid string"
我们似乎不太了解该指令,因为我们为解决此类警报(我们有几个类似的警报)所做的所有努力都没有产生结果。我的意思是,我们显然没有正确构建字符串,但由于程序编译并且 运行s 正确,我们不知所措。
我们缺少什么样的 运行 时间检查?
谢谢!
编辑:我忘了提到传递字符串文字似乎适用于 Polyspace,但如果我们尝试传递在 运行 时间生成的字符串(如代码中),则它不起作用。难道是因为open()的原型声明了第一个参数是const char*,Polyspace太认真了?
该问题已被判定为误报。警报应相应地合理化。
谢谢!
首先,请考虑以下代码(从 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] = {'[=11=]'};
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 进行静态分析会引发有关 MISRA "Dir 4.1 Run-time failures shall be minimized" 的警报。警报说:"first argument (file path) may not be a valid string"
我们似乎不太了解该指令,因为我们为解决此类警报(我们有几个类似的警报)所做的所有努力都没有产生结果。我的意思是,我们显然没有正确构建字符串,但由于程序编译并且 运行s 正确,我们不知所措。
我们缺少什么样的 运行 时间检查?
谢谢!
编辑:我忘了提到传递字符串文字似乎适用于 Polyspace,但如果我们尝试传递在 运行 时间生成的字符串(如代码中),则它不起作用。难道是因为open()的原型声明了第一个参数是const char*,Polyspace太认真了?
该问题已被判定为误报。警报应相应地合理化。
谢谢!