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

问题描述

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

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

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

任何建议将不胜感激!

解决方法

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

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

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