gpt4 book ai didi

c++ - 为什么 vsnprintf 是安全的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:54 26 4
gpt4 key购买 nike

我看过这个question以及这些 PDF 的 12 , 这个page并且非常了解如果我这样做会发生什么 printf(SOME_TEST_STRING)。但我不明白的是,与 vsprintf 相比,为什么通过确保缓冲区的大小 vsnprintf 变得安全?

最佳答案

在这两种情况下会发生什么?

案例一

char buf[3];
vsprint(buf, "%s", args);

案例二

char buf[3];
vsnprint(buf, sizeof buf, "%s", args);

在情况 1 中,如果您正在格式化的字符串的长度为 3 或更大,则缓冲区溢出,vsprintf 可能会写入超出 buf 数组存储空间的内存,这是未定义的行为,可能会造成严重破坏/安全问题/崩溃/等。

在情况 2 中,vsnprintf 知道将包含结果的缓冲区有多大,并且它将确保不会超过该缓冲区(而是截断结果以适应 buf )。

关于c++ - 为什么 vsnprintf 是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26011294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com