Visible to the public Ares: Inferring Error Specifications through Static Analysis

TitleAres: Inferring Error Specifications through Static Analysis
Publication TypeConference Paper
Year of Publication2019
AuthorsLi, Chi, Zhou, Min, Gu, Zuxing, Gu, Ming, Zhang, Hongyu
Conference Name2019 34th IEEE/ACM International Conference on Automated Software Engineering (ASE)
KeywordsAPI-related defects, application program interfaces, Ares, error handling, error handling blocks, error specification, predictability, program debugging, program diagnostics, program testing, pubcrawl, reliability flaws, Resiliency, Scalability, security, Security Heuristics, security of data, static analysis
AbstractMisuse of APIs happens frequently due to misunderstanding of API semantics and lack of documentation. An important category of API-related defects is the error handling defects, which may result in security and reliability flaws. These defects can be detected with the help of static program analysis, provided that error specifications are known. The error specification of an API function indicates how the function can fail. Writing error specifications manually is time-consuming and tedious. Therefore, automatic inferring the error specification from API usage code is preferred. In this paper, we present Ares, a tool for automatic inferring error specifications for C code through static analysis. We employ multiple heuristics to identify error handling blocks and infer error specifications by analyzing the corresponding condition logic. Ares is evaluated on 19 real world projects, and the results reveal that Ares outperforms the state-of-the-art tool APEx by 37% in precision. Ares can also identify more error specifications than APEx. Moreover, the specifications inferred from Ares help find dozens of API-related bugs in well-known projects such as OpenSSL, among them 10 bugs are confirmed by developers. Video: https://youtu.be/nf1QnFAmu8Q. Repository: https://github.com/lc3412/Ares.
DOI10.1109/ASE.2019.00130
Citation Keyli_ares_2019