【发布时间】:2019-01-02 05:25:03
【问题描述】:
我在某处看到这个格式错误的 C++ 程序可以使 g++ 生成一个巨大的错误日志:
int main()
{
struct x struct z<x(x(x(x(x(x(x(y,x(y><y*,x(y*w>v<y*,w,x{};
return 0;
}
通过多次重复(x,错误日志可以增长到>1GB。所以这个程序可以用来耗尽受害者的系统资源。虽然这个问题可以通过--fmax-error 解决,但我很好奇 g++ 在编译过程中发生了什么导致它吐出这样的日志。
【问题讨论】:
-
您在询问一种语言的内部日志记录功能。即使您担心潜在的 DoS 影响,这也不是安全问题。
-
可能最适合 gcc 开发邮件列表。
-
日志的内容是什么样的?
-
除非“受害者”是某种在线编译服务,否则很难看出这会如何构成攻击。大多数人不经常编译随机源代码。你在什么情况下会担心这个?
-
@rici 你明白了。确实是在线编译服务。
标签: c++ compiler-construction g++