为什么 readlink return 不是空终止值?

Why doesn't readlink return a null-terminated value?

The Single UNIX ® Specification, Version 2 (1997) and The Open Group Base Specifications Issue 6 (2004) 都要求 readlink 不会在 buffer 中放置以 null 结尾的值:

APPLICATION USAGE

Conforming applications should not assume that the returned contents of the symbolic link are null-terminated.

非空终止有哪些注意事项buffer?如果 readlink 没有正确使用,它不会带来安全风险吗?

我刚刚阅读了您的链接。

一个简单的方法来使这个安全使用是在函数 returns 时将一个零写入最后一个缓冲区位置。使用返回的尺寸。

您应该仔细检查返回的大小值是否不是 -1 并且始终小于缓冲区长度。如果相等则被截断(可能)。

What are the considerations in not null-terminating buffer?

如文档所示,可移植性。很可能存在(-ed?)广泛使用的 readlink 实现没有 null-terminate 缓冲区。

Couldn't it pose a security risk when readlink isn't properly used?

我猜每一段使用不当的错误代码都会带来安全风险。程序员有责任编写没有安全风险的好代码。 posix 页面的示例部分显示了 readlink.

的正确用法