This repository features two sorts of bugs: functional bugs and safety bugs. Functional bugs are software errors that violates the programmer's intention or other expectations that the software is supposed to meet. These are typically manifested as simple expectation violations such as assertion violations, or unexpected software errors such as crashes, infinite loop, or resource exhaustion. On the other hand, safety bugs are software errors that cause problems such as memory leak, use-after-free, or double free. Unlike functional bugs, these do not induce assertion errors or crashes; rather, they are typically manifested as software vulnerabilities such as memory management faults in C projects or overflow/underflow during integer arithmetic in Solidity smart contracts.
Benchmarks_with_Functional_Bugs
contains functional bugs found from open-source Java projects and student assignment submissions written in OCaml.- The Java projects has failing testcases revealing logical errors.
- The OCaml student submissions feature assertion violations required by the respective exercise problems.
Benchmarks_with_Safety_Bugs
contains safety bugs found from open-source C projects and Real-world Ethereum smart contracts written in Solidity.- The C projects show faults in memory management, namely, memory-leak, double-free, or use-after-free.
- The Solidity smart contracts show faults in integer arithmetic, such as integer overflows or underflows.
Bug Type | Target Language | Fault kind | # of Faults | Sum |
---|---|---|---|---|
Safety | C | Resource Leak, Memory Leak | 200 | 1000 |
Java | Null Pointer Exception | 500 | ||
Solidity | Integer Overflow | 300 | ||
Functional | Java | Logical Error | 100 | 400 |
OCaml | 300 |