【发布时间】:2012-09-02 19:02:37
【问题描述】:
我决定在一些旧代码上运行一个静态分析工具,我发现了很多我正在使用 sprintf 的地方。该工具建议使用 vsnprintf 或 snprintf 替换调用,因为 sprintf 不会对缓冲区溢出进行任何类型的边界检查。
我可以轻松地对调用进行查找和替换,以便它使用 snprintf 或 vsnprintf,但我想确保不需要做任何其他事情来确保功能安全
在某些情况下,所使用的字符串源自用户输入,而在某些情况下则不是。
有人对如何正确地做这件事有任何建议吗?
【问题讨论】:
-
"是 snprintf 还是 vsnprintf 更好" 这取决于您是否有可变参数或
va_list。 -
不担心便携性,不。
-
需要注意的是,C11 引入了(甚至)更安全的
sprintf_s、snprintf_s、vsnprintf_s。但是,它们是可选的。
标签: c printf buffer-overflow