最近遇到一个诡异的问题,一个程序经常卡死。最后定位到 fmt 和下面简单的例子:
#include <fmt/format.h>
#include <iostream>
int main()
{
char buffer[12];
fmt::format_to_n(buffer, 5, "aaaa{}", "bbbb");
std::cout << buffer;
return 0;
}
上面这个程序会卡死, CPU 一直占用 100%,程序不会结束。很奇葩的是,把长度限制设置为 4、5、6、7 就会卡死,更小或更大则不会。
github 上有人提到这个 bug :format_to_n will hang infinitely if buffer size is < required size of formatted string,在 2020 年 11 月份被修复。所以升级到 fmt 最新版本即可解决这个问题。
Q. E. D.