非常长的输入和 yacc /lex 怎么样?

What about very long input and yacc /lex?

我考虑如何解决 yacc 和 lex 输入太长的问题。例如,我无法控制输入长度的长度,我害怕缓冲流攻击。

你怎么看?

没有理由担心 (f)lex 或 yacc/bison 生成的代码。它们要么重新分配缓冲区和堆栈,要么报告内存不足的情况。

一般lex和yacc的传统配置不太愿意使用额外的内存,因此病态输入可能会导致解析失败并出现内存错误,但这不是安全问题。

当然,这并不能免除您确保所有代码都没有缓冲区溢出的责任。避免固定长度的缓冲区;始终检查限制;永远不要假设 malloc 不会 return 0.