C 您是否使用TR 24731';安全';功能?
ISO C委员会()已发布并正在致力于: TR 24731-1:C库的扩展第一部分:边界检查接口 WG14正在开发一个关于更安全的C库函数的TR。此TR面向修改现有程序,通常是通过添加一个额外的缓冲区长度参数。最新草案见文件N1225。基本原理见文件N1173。这将成为技术报告类型2 TR 24731-2:C库的扩展-第二部分:动态分配功能 WG14正在开发一个关于更安全的C库函数的TR。该TR面向使用动态分配的新程序,而不是缓冲区长度的额外参数。最新草案见文件N1337。这将成为技术报告类型2 问题C 您是否使用TR 24731';安全';功能?,c,security,coding-style,tr24731,C,Security,Coding Style,Tr24731,ISO C委员会()已发布并正在致力于: TR 24731-1:C库的扩展第一部分:边界检查接口 WG14正在开发一个关于更安全的C库函数的TR。此TR面向修改现有程序,通常是通过添加一个额外的缓冲区长度参数。最新草案见文件N1225。基本原理见文件N1173。这将成为技术报告类型2 TR 24731-2:C库的扩展-第二部分:动态分配功能 WG14正在开发一个关于更安全的C库函数的TR。该TR面向使用动态分配的新程序,而不是缓冲区长度的额外参数。最新草案见文件N1337。这将成为技术报告类型2
- 您是否使用支持TR24731-1函数的库或编译器
- 如果是,哪个编译器或库以及在哪个平台上
- 在修复代码以使用这些函数时,是否发现了任何错误
- 哪些功能提供的价值最大
- 是否有不提供值或负值的值
- 你打算将来使用图书馆吗
- 你在跟踪TR24731-2的工作吗
- 您是否使用支持TR24731-1函数的库或编译器 不,我没有
- 如果是,哪个编译器或库以及在哪个平台上 我相信这些函数是由MS Visual Studio(例如MS VC++2008版)提供的,并且有一些警告鼓励您使用它们
- 在修复代码以使用这些函数时,是否发现了任何错误 还没有。我不希望在我的代码中发现很多东西。我使用的其他一些代码-也许。但我还没被说服
- 哪些功能提供的价值最大
我喜欢printf_s()函数族不接受“
”格式说明符这一事实%n
- 是否有不提供值或负值的值
和tmpfile_s()
函数令人失望。他们真的需要像tmpnam_s()
那样工作,创建并打开文件以确保没有TOCTU(检查时间、使用时间)漏洞。就目前而言,这两者的价值微乎其微 我还认为mkstemp()
提供的价值很小strerrorlen\u s()
- 你打算将来使用图书馆吗 我对此犹豫不决。我开始研究一个库,该库将在标准C库上实现TR 24731的功能,但被证明它正常工作所需的大量单元测试所困扰。我不确定是否要继续这样做。我有一些代码想移植到Windows(主要是出于一种在所有平台上提供支持的不正当愿望——它已经在Unix衍生产品上工作了几十年了)。不幸的是,为了让它在没有MSVC编译器警告的情况下编译,我必须在代码中添加一些东西,以防止MSVC吹嘘我使用了非常可靠(仔细使用时)的标准C库函数。这不是开胃菜。这已经够糟糕的了,我不得不处理在这段时间里发展起来的20年的大部分系统;必须处理某人的乐趣想法(让人们在不需要的时候采用TR 24731)很烦人。这就是我开始开发库的部分原因——允许我在Unix和Windows上使用相同的界面。但我不确定从这里我能做什么
- 你在跟踪TR24731-2的工作吗
直到我去了标准实验室,我才开始追踪它
#define __STDC_WANT_LIB_EXT1__ 1 #include <stdarg.h> #include <stdio.h> int vsnprintf_s(char * restrict s, rsize_t n, const char * restrict format, va_list arg);
int vsnprintf_s( char *buffer, size_t sizeOfBuffer, size_t count, const char *format, va_list argptr );
struct tm *localtime_s(const time_t * restrict timer, struct tm * restrict result);
errno_t localtime_s(struct tm* _tm, const time_t *time);
struct tm *localtime_r(const time_t *restrict timer, struct tm *restrict result);
char *strtok_s(char *strToken, const char *strDelimit, char **context);
char *strtok_s(char * restrict s1, rsize_t * restrict s1max, const char * restrict s2, char ** restrict ptr);