Fluidsynth / 源码审计2026 · 10 · 25 新加坡时间
代码质量 · 覆盖率 · 可复现问题

把没被测试照到的地方,逐个跑一遍。

我从高圈复杂度、低覆盖率的音频与格式解析路径开始,构造输入重现问题,再给每个问题补上回归用例。本页记录截至 2026-10-25 10:00 新加坡时间的审计结果。

51确认且可复现的问题
74 / 74完整常规测试通过
72 / 72合格的 ASan / UBSan / LSan 测试通过
61.5%源码行覆盖率;分支 45.4%,函数 67.6%

直接筛问题

按关键词、输入类型、问题种类和严重程度缩小列表

已复现的缺陷

问题清单

51 项

没有找到符合条件的问题。试试清空筛选或换一个关键词。
怎么审计

先找盲区,再证实问题。

圈复杂度用来找分支多的代码;覆盖率用来找现有测试没走到的分支。两者只是线索,每条问题都用单独输入重现后才列入清单。

  • 对 upstream/master c7ba7b49 做审计;与 24 个未合并的 fix 分支比对,排除已在那些分支处理的问题。
  • 用 Lizard 计算复杂度、gcovr 生成覆盖率;源码覆盖为 61.5% 行、45.4% 分支、67.6% 函数。高复杂、低覆盖函数优先检查。
  • 用 ASan、UBSan、LSan 做定点重现;libFuzzer 跑 MIDI、DLS、SF2 解析器,累计分别执行 428,395、471,995、195,433 次。另以有效 MTS、GS、XG 种子测试 SysEx 入口 181 秒,产生 17,525,710 个字节输入(每个输入各跑普通与试运行两条路径),没有发现崩溃。最近一轮解析器 fuzz 分别执行 91,203、131,129、65,361 次,没有发现崩溃。用 Mull 做源码级变异测试。公开合成器 API 状态 fuzz 此前跑过 164,418 个输入;之后在 F44 的精简回归序列之外,修复版又跑了 26,963,447 个输入,没有发现新崩溃。此前 11,175 与 21,483 个输入各重现并修复一个数值边界问题。
  • 测试汇总:完整常规测试 74/74;覆盖率构建 71/71;ASan / UBSan / LSan 排除两个已有分支修复的泄漏用例后 72/72。
  • Mull 变异测试按源码文件筛选,得分反映本次选定回归测试能杀死的变异:MIDI parser 57%,MIDI router 87%(13/106 个变异存活),DLS parser 78%(本轮杀死 210/269 个变异),synth 31%,voice 55%(test_sfont_keynum_bounds:50/90),sequencer 50%(4/8 个存活,均为未覆盖的清理路径空值判断),单音连奏 50%(6/12 个存活)。F51 的 PTBL 分配回归是在原 DLS 变异运行之后加入;单独对该测试运行时,DLS 源文件范围内 92 个变异杀死 30 个(32%)。它仍不是 F51 的单项分数;DLS 解析器 78% 分数来自覆盖更广的另一组测试。幸存变异仍需后续测试补强。