Verifying Object Construction

Download: PDF, implementation, scripts and data.

“Verifying Object Construction” by Martin Kellogg, Manli Ran, Manu Sridharan, Martin Schäf, and Michael D. Ernst. In ICSE 2020, Proceedings of the 42nd International Conference on Software Engineering, (Seoul, Korea), May 2020.

Abstract

In object-oriented languages, constructors often have a combination of required and optional formal parameters. It is tedious and inconvenient for programmers to write a constructor by hand for each combination. The multitude of constructors is error-prone for clients, and client code is difficult to read due to the large number of constructor arguments. Therefore, programmers often use design patterns that enable more flexible object construction — the builder pattern, dependency injection, or factory methods.

However, these design patterns can be too flexible: not all combinations of logical parameters lead to the construction of well-formed objects. When a client uses the builder pattern to construct an object, the compiler does not check that a valid set of values was provided. Incorrect use of builders can lead to security vulnerabilities, run-time crashes, and other problems.

This work shows how to statically verify uses of object construction, such as the builder pattern. Using a simple specification language, programmers specify which combinations of logical arguments are permitted. Our compile-time analysis detects client code that may construct objects unsafely. Our analysis is based on a novel special case of typestate checking, accumulation analysis, that modularly reasons about accumulations of method calls. Because accumulation analysis does not require precise aliasing information for soundness, our analysis scales to industrial programs. We evaluated it on over 9 million lines of code, discovering defects which included previously-unknown security vulnerabilities and potential null-pointer violations in heavily-used open-source codebases. Our analysis has a low false positive rate and low annotation burden.

Our implementation and experimental data are publicly available.

Download: PDF, implementation, scripts and data.

BibTeX entry:

@inproceedings{KelloggRSSE2020,
   author = {Martin Kellogg and Manli Ran and Manu Sridharan and Martin
	Sch{\"a}f and Michael D. Ernst},
   title = {Verifying Object Construction},
   booktitle = {ICSE 2020, Proceedings of the 42nd International
	Conference on Software Engineering},
   address = {Seoul, Korea},
   month = may,
   year = {2020}
}

(This webpage was created with bibtex2web.)

Back to Michael Ernst's publications.