paperbot · PL 论文追踪

全部论文 待读 收藏

P2 SAVER

SAVER:可扩展、精确且安全的内存错误修复
ICSE Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering2020匹配度 3/10 · 该论文属于静态分析与自动化程序修复(内存错误修复)方向,结合工业级工具 Infer 有一定落地价值,但与用户核心关注的 LLM/Agent 与静态分析交叉、浮点程序分析或贝叶斯程序分析均无直接关联。引用 30 inbox
Seongjoon Hong, Junhee Lee, Jeongsoo Lee, Hakjoo Oh
crossref: 2026-09-12

AI 速览

一句话:提出基于对象流图的内存错误自动修复技术,可同时实现可扩展、精确且安全的 C 程序内存错误修复。

内存错误(如内存泄漏、双重释放、释放后使用)在 C 程序中十分普遍且修复成本高。现有自动修复技术难以同时做到可扩展、精确与安全。本文提出 SAVER,其核心是一种称为对象流图(object flow graph)的程序表示,通过静态分析概括堆相关行为,并将内存错误修复建模为对象流图上的图标记问题,进而给出高效求解算法。作者将 SAVER 与工业级静态缺陷检测器 Infer 结合,在多个开源 C 程序上评估,结果表明 74% 的已报告错误可被自动修复。

问题
如何自动、可扩展、精确且安全地修复 C 程序中的内存错误(内存泄漏、双重释放、释放后使用),现有技术无法同时满足这些要求。
方法
使用静态分析构建对象流图来概括程序的堆相关行为,将内存错误修复形式化为对象流图上的图标记问题,并设计高效算法求解。
评估
将 SAVER 与工业级静态缺陷检测器 Infer 结合,在多个开源 C 程序上评估,自动修复了 74% 的已报告错误。
原文摘要(Abstract)

We present SAVER, a new memory-error repair technique for C programs. Memory errors such as memory leak, double-free, and use-after-free are highly prevalent and fixing them requires significant effort. Automated program repair techniques hold the promise of reducing this burden but the state-of-the-art is still unsatisfactory. In particular, no existing techniques are able to fix those errors in a scalable, precise, and safe way, all of which are required for a truly practical tool. SAVER aims to address these shortcomings. To this end, we propose a method based on a novel representation of the program called object flow graph, which summarizes the program's heap-related behavior using static analysis. We show that fixing memory errors can be formulated as a graph labeling problem over object flow graph and present an efficient algorithm. We evaluated SAVER in combination with Infer, an industrial-strength static bug-finder, and show that 74% of the reported errors can be fixed automatically for a range of open-source C programs.

链接与引用

DOI 原文 ·

BibTeX
@inproceedings{paperbot5610,
  title = {SAVER},
  author = {Seongjoon Hong and Junhee Lee and Jeongsoo Lee and Hakjoo Oh},
  booktitle = {ICSE},
  year = {2020},
  doi = {10.1145/3377811.3380323}
}