Publication View

Flow-Insensitive Type Qualifiers 1 (2009)

Abstract
We describe flow-insensitive type qualifiers, a lightweight, practical mechanism for specifying and checking properties not captured by traditional type systems. We present a framework for adding new, user-specified type qualifiers to programming languages with static type systems, such as C and Java. In our system, programmers add a few type qualifier annotations to their program, and automatic type qualifier inference determines the remaining qualifiers and checks the annotations for consistency. We describe a tool CQual for adding type qualifiers to the C programming language. Our tool CQual includes a visualization component for displaying browsable inference results to the programmer. Finally, we present several experiments using our tool, including inferring const qualifiers, finding security vulnerabilities in several popular C programs, and checking initialization data usage in the Linux kernel. Our results suggest that inference and visualization make type qualifiers lightweight, that type qualifier inference scales to large programs, and that type qualifiers are applicable to a wide variety of problems.

Publication details
Download http://citeseerx.ist.psu.edu/viewdoc/summary?doi=?doi=10.1.1.137.6389
Source http://www.cs.sunysb.edu/~rtjohnso/papers/toplas-quals.pdf
Contributors CiteSeerX
Repository CiteSeerX - Scientific Literature Digital Library and Search Engine (United States)
Keywords General Terms, Algorithms, Design, Reliability, Experimentation, Languages, Theory, Verification Additional Key Words and Phrases, Type qualifiers, types, security, constraints, const, taint, static analysis
Type text
Language English
Relation 10.1.1.67.5276, 10.1.1.44.5122, 10.1.1.56.6283, 10.1.1.18.2054, 10.1.1.48.1266, 10.1.1.73.5743, 10.1.1.73.4916, 10.1.1.18.7463, 10.1.1.18.6621, 10.1.1.10.8871, 10.1.1.28.6121, 10.1.1.42.3091, 10.1.1.29.1113, 10.1.1.22.1574, 10.1.1.21.9459, 10.1.1.18.6816, 10.1.1.126.2668, 10.1.1.137.8906, 10.1.1.37.5096, 10.1.1.37.3224, 10.1.1.37.9560, 10.1.1.40.1443, 10.1.1.35.9392, 10.1.1.63.8482, 10.1.1.32.7750, 10.1.1.118.9043, 10.1.1.22.7503, 10.1.1.133.4369, 10.1.1.18.3903, 10.1.1.127.6320