相关疑难解决方法(0)

您是否使用TR 24731'安全'功能?

ISO C委员会(ISO/IEC JTC1/SC21/WG14)已发布TR 24731-1,正在研究TR 24731-2:

TR 24731-1:C库的扩展第一部分:边界检查接口

WG14正在研究更安全的C库函数.该TR旨在通过添加具有缓冲区长度的额外参数来修改现有程序.最新草案见N1225号文件.理由是在N1173号文件中.这将成为技术报告类型2.

TR 24731-2:C库的扩展 - 第二部分:动态分配功能

WG14正在研究更安全的C库函数.该TR面向使用动态分配而不是缓冲区长度的额外参数的新程序.最新草案见N1337号文件.这将成为技术报告类型2.

问题

  • 您是否使用支持TR24731-1功能的库或编译器?
  • 如果是这样,哪个编译器或库以及哪个平台?
  • 您是否因修复代码以使用这些功能而发现任何错误?
  • 哪些功能提供最大价值?
  • 有没有提供任何价值或负值?
  • 你打算将来使用这个图书馆吗?
  • 您是否正在跟踪TR24731-2的工作?

c security coding-style tr24731

71
推荐指数
5
解决办法
1万
查看次数

哪个是最标准的:strnlen 或 strnlen_s?

在我当前的项目中,我根据 C11 标准(使用 构建gcc -std=c11)进行编码,并且需要类似的东西strnlen(“安全”版本strlen返回以 0 结尾的字符串的长度,但只能达到给定的最大值)。所以我查了一下(例如https://en.cppreference.com/w/c/string/byte/strlen),似乎 C11 标准提到了这样一个函数,但名称为strnlen_s.

因此我选择了strnlen_s,但是当包含string.h. 另一方面,strnlen是定义的,所以我目前的解决方案是使用strnlen一个注释,即标准名称似乎是strnlen_s,但这不是由 GCC 定义的。

问题是:我认为这strnlen是最可移植的名称是否正确,或者我可以做些什么使代码最可移植/标准?

注:微软(https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strnlen-strnlen-s)实现与区分这两种功能是strnlen_s检查字符串指针NULL,并返回0在这种情况虽然strnlen没有这样的检查。

c c11

3
推荐指数
1
解决办法
632
查看次数

标签 统计

c ×2

c11 ×1

coding-style ×1

security ×1

tr24731 ×1