什么是 __attribute__((__bounded__(__string__,2,3)))?

what is __attribute__((__bounded__(__string__,2,3)))?

我是 openbsd bcrypt 代码,我在下面的代码片段中收到了未知属性 bounded 的警告:

void SHA256Update(SHA2_CTX *, const void *, size_t)
__attribute__((__bounded__(__string__,2,3)));

我试过google属性有界但没有找到相关结果。我想将该代码移植到不同的平台,如果我了解有界属性的含义,我想使用该平台的类似属性。

如有任何建议,我们将不胜感激!

__bounded__ 属性在函数声明的上下文中可用,可以使用另一个函数参数的值来确定一个函数参数指向的内存区域的长度;第一个参数稍微改变了不同风格函数的检查类型。

在这种情况下,它使用第三个参数指定的长度来增加函数的第二个参数的类型; __string__ 绑定样式另外检查大小参数是否来自应用于指针的 sizeof,因为你想要目标的大小。

它仅在 GCC 的 OpenBSD 分支中可用(参见 man 1 gcc-local);还有一个短暂的 GNU C 扩展(在 2000 年到 2003 年之间),名称相同,目的相同,它是一个直接类型限定符,也可以在函数声明之外使用,但是,据我所知,它没有记录。