使用C open()函数的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] = {''};
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 Provert的静态分析会引发并警告MISRA的"Dir 4.1运行时故障应最小化"。警报称:"第一个参数(文件路径(可能不是有效的字符串">

我们似乎不太理解该指令,因为我们解决此类警报的所有努力(我们有几个类似的警报(都没有产生结果。我的意思是,我们显然没有正确构建字符串,但由于程序编译和运行正确,我们不知所措。

我们缺少什么类型的运行时检查?

谢谢!

编辑:我忘了提一下,传递字符串文字似乎对Polyspace有效,但如果我们试图传递在运行时生成的字符串(就像在代码中一样(,它就不起作用。这可能是因为open((的原型声明第一个参数是const-char*,而Polyspace太认真了吗?

该问题已被判断为假阳性。应相应地证明警报的合理性。

谢谢!

相关内容

  • 没有找到相关文章

最新更新