我通过覆盖率工具收到以下错误 -
overrun-buffer-arg:通过将结构类型in_addr传递给一个使用参数" 8UL"来访问字节偏移量为7的函数来超越4字节的结构类型in_addr。
示例代码:
static u_long addr;
static struct sockaddr_in remote_server;
addr = inet_addr(remote_servername);
memcpy((char *) &remote_server.sin_addr, (char *)&addr, sizeof(addr));
在最后一行,我收到了上述错误。
有人可以通过一些了解,出了什么问题。
如果您需要更多信息,请与我们联系。
答案 0 :(得分:2)
标准警告:不要将指针指向/ void *
。
对于消息:仔细阅读,它很好地说明了问题。只是一个提示:使用正确的类型。您显然正在访问超出其大小的结构。实际上你的大小有多大?
addr
应该正确序列化到uint8_t [],尊重endianess。当你从第二个参数中取sizeof()
时,显然第一个参数更短。
为什么不只是分配,而是使用memcpy()
?检查两者的类型相同。
答案 1 :(得分:2)
inet_addr()返回in_addr_t,而不是u_long。 struct sockaddr_in的sin_addr是一个结构in_addr,它包含一个in_addr_t s_addr。
这应该可以解决问题:
static struct sockaddr_in remote_server;
remote_server.sin_addr.s_addr = inet_addr(remote_servername);