Repairing Leaks in Resource Wrappers
Sanjay Malakar, Michael D. Ernst, Martin Kellogg, Manu Sridharan
TL;DR
Resource leaks in Java often involve user-defined wrappers that hold resources in fields, which bluntly challenges automated repair. Arodnap integrates RLC inference, code transformations, and enhanced RLFixer with field containment analysis to enable sound repairs for wrapper-based leaks, including patch materialization and validation. On the NJR benchmark, Arodnap achieves a leak-resolution rate of 68%, surpassing the previous 41% by RLFixer alone and 50% with inference added, by effectively handling resources stored in fields and through new repair patterns like pre-close insertion. This work significantly broadens automated repair coverage for real-world resource management patterns and provides an end-to-end pipeline with static/dynamic validation and open-source tooling. The approach offers practical impact by enabling safer, automated fixes for wrapper-based resource leaks in large Java codebases.
Abstract
A resource leak occurs when a program fails to release a finite resource like a socket, file descriptor or database connection. While sound static analysis tools can detect all leaks, automatically repairing them remains challenging. Prior work took the output of a detection tool and attempted to repair only leaks from a hard-coded list of library resource types. That approach limits the scope of repairable leaks: real-world code uses resource wrappers that store a resource in a field and must themselves be closed. This paper makes four key contributions to improve resource leak repair in the presence of wrappers. (1) It integrates inference of resource management specifications into the repair pipeline, enabling extant fixing approaches to reason about wrappers. (2) It transforms programs into variants that are easier to analyze, making inference, detection, and fixing tools more effective; for instance, it makes detection tools report problems closer to the root cause, often in a client of a resource wrapper rather than within the wrapper class itself. (3) A novel field containment analysis reasons about resource lifetimes, enabling repair of more leaks involving resources stored in fields. (4) It introduces a new repair pattern and more precise reasoning to better handle resources stored in non-final fields. Prior work fixed 41% of resource leak warnings in the NJR benchmark suite; our implementation Arodnap fixes 68%.
