Fluidsynth / 源码审计2026 · 10 · 25 新加坡时间
代码质量 · 覆盖率 · 可复现问题
把没被测试照到的地方,逐个跑一遍。
我从高圈复杂度、低覆盖率的音频与格式解析路径开始,构造输入重现问题,再给每个问题补上回归用例。本页记录截至 2026-10-25 09:26 新加坡时间的审计结果。
51确认且可复现的问题
74 / 74完整常规测试通过
72 / 72合格的 ASan / UBSan / LSan 测试通过
61.5%源码行覆盖率;分支 45.4%,函数 67.6%
直接筛问题
按关键词、输入类型、问题种类和严重程度缩小列表
没有找到符合条件的问题。试试清空筛选或换一个关键词。
怎么审计
先找盲区,再证实问题。
圈复杂度用来找分支多的代码;覆盖率用来找现有测试没走到的分支。两者只是线索,每条问题都用单独输入重现后才列入清单。
- 对 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 的独立分配回归是在 DLS 变异运行之后加入,直接检查每次分配大小;因此这里的 DLS 分数不包含它。幸存变异仍需后续测试补强。