gpt4 book ai didi

c - 可怕的 strlcat 错误或隐藏的天才?

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:36 25 4
gpt4 key购买 nike

我无法修复一些遗留的 RAID 代码(是的,我拔了最短的稻草)。

这是我找到的一段代码。

#define FLAG_LENGTH 256

#code
char str[FLAG_LENGTH-1]

strlcat(&str,source_ptr,FLAG_LENGTH);

在 str 声明的正上方有评论说大小少 1 是有充分理由的,但是慷慨的评论作者没有提到“充分理由”。

如果我正确理解 strlcat 的实现,它无论如何都会以 NULL 终止所有字符串,并且如果 256 会将其添加到大小为 255 的字符串的第 256 个字符,即索引 255,即最后一个索引 254。Arent我们溢出了字符串??或者这样做是否有一些隐藏的天才(纯粹根据评论提问)

最佳答案

是的,这段代码是危险的错误。真的没什么可说的了。我猜有人不小心写了 -1 而不是 +1,但是数组的大小和传递给 strlcat 的大小之间没有任何差异。

顺便说一句,我认为这种错误是一个很好的例子,说明为什么神奇的“安全”字符串接口(interface)不是 Elixir 。编写可靠的代码不需要是白痴。语言或库功能不会保护您免受自己的愚蠢。

关于c - 可怕的 strlcat 错误或隐藏的天才?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com