【问题标题】:coverity is throwing overrun-buffer-arg issues覆盖引发溢出缓冲区参数问题
【发布时间】:2022-01-03 04:12:45
【问题描述】:

coverity 抛出以下错误: overrun-buffer-arg: 用 "key_name + len" 和 "256U" 调用 "snprintf" 是可疑的,因为 "key_name" 指向 256 字节的缓冲区并且函数调用可能访问 "(char *)(key_name + len) + 255U"。

char key_name[256];

u_int32_t  len;

snprintf(key_name+len, 256, "%s", student->name);

请建议如何解决此问题

【问题讨论】:

    标签: c printf buffer-overflow coverity


    【解决方案1】:

    如果 len 不是 0,则 snprintf 可以写入缓冲区 key_name 之外。例如,如果student->name 很长。或者如果len 接近 256 或更高。

    由于snprintf 是专门为防止缓冲区溢出而设计的,因此这是一条非常有用的警告消息。

    应该是这样的:

    char key_name[256];
    size_t len = 0;
    
    snprintf(key_name + len, sizeof key_name - len, "%s", student->name);
    

    这应该适用于每个0 len sizeof key_name。即使len 增长,例如典型的其他snprintf 调用,这将确保它不会溢出缓冲区。

    编辑: 您还应该对照sizeof key_name - len 检查snprintf 的返回值。如果它等于或大于,则学生姓名被截断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多