Hasty Briefsbeta

双语

Compiler Bug Causes Compiler Bug: How a 12-Year-Old G++ Bug Took Down Solidity

9 months ago
  • #Solidity
  • #Compiler
  • #C++
  • Solidity编译器(Solc)因G++、Boost和C++20的组合缺陷而在有效代码上崩溃
  • 该问题源于G++存在12年的函数重载解析错误——错误地优先选择非成员函数
  • C++20的对称比较特性与Boost过时的比较模式结合时会导致无限递归
  • Boost 1.75之前的版本存在有问题的operator==实现,会在C++20下触发递归重写
  • 当处理编译期有理数比较(如T[0])时,Solidity会出现崩溃
  • 受影响环境包括:G++ < 14版本、Boost < 1.75版本及启用C++20的构建
  • 建议解决方案:升级Boost至≥1.75版本或使用G++ v14+版本
  • 该事件揭示了构建栈的脆弱性,以及多版本编译器/库测试的重要性