Demo Data from EDBT 2026 / reviewers in the wild / expert
John Toman
dblp:129/2319
· DBLP profile ↗
6ranked-venue papers
5as first author
1since 2021 · last 2024
0009-0005-1015-1624ORCID · corroborated
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 6 · 5 first-author · 1 since 2021
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
3 papers |
Program verification · 50% Program analysis · 25% Compilers and program optimization · 19% | |
| Network and information security
1 paper |
Systems and software security · 100% |
Topics — the 12 heaviest of 12, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Compilers and program optimization › compiler optimization
memory partitioning |
0.8 | 1 | 2024 | Practical Verification of Smart Contracts using Memory Splitting · Proc. ACM Program. Lang. 2024 |
Program verification › code-level verification
smart contract verification |
0.8 | 1 | 2024 | Practical Verification of Smart Contracts using Memory Splitting · Proc. ACM Program. Lang. 2024 |
Program verification
SMT-based verification |
0.8 | 1 | 2024 | Practical Verification of Smart Contracts using Memory Splitting · Proc. ACM Program. Lang. 2024 |
Program analysis › static analysis
abstract interpretation |
0.4 | 1 | 2019 | Concerto: a framework for combined concrete and abstract interpretation · Proc. ACM Program. Lang. 2019 |
Program analysis
static analysis |
0.4 | 1 | 2019 | Concerto: a framework for combined concrete and abstract interpretation · Proc. ACM Program. Lang. 2019 |
Program analysis › static analysis
pointer analysis |
0.2 | 1 | 2024 | Practical Verification of Smart Contracts using Memory Splitting · Proc. ACM Program. Lang. 2024 |
Systems and software security
memory safety |
0.2 | 1 | 2015 | Crust: A Bounded Verifier for Rust (N) · ASE 2015 |
Systems and software security › memory safety
unsafe code verification |
0.2 | 1 | 2015 | Crust: A Bounded Verifier for Rust (N) · ASE 2015 |
Program verification › model checking
bounded model checking |
0.2 | 1 | 2015 | Crust: A Bounded Verifier for Rust (N) · ASE 2015 |
Program verification › security property verification
memory safety verification |
0.2 | 1 | 2015 | Crust: A Bounded Verifier for Rust (N) · ASE 2015 |
Programming languages and type systems
metaprogramming |
0.1 | 1 | 2019 | Concerto: a framework for combined concrete and abstract interpretation · Proc. ACM Program. Lang. 2019 |
Programming languages and type systems › metaprogramming
reflection |
0.1 | 1 | 2019 | Concerto: a framework for combined concrete and abstract interpretation · Proc. ACM Program. Lang. 2019 |
Methods — techniques the papers use, named apart from their topics
pointer analysis · 0.8memory allocation recovery · 0.8SMT solving · 0.8exhaustive test generation · 0.4bounded model checking · 0.4concrete interpretation · 0.4abstract interpretation · 0.4
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2024 | Practical Verification of Smart Contracts using Memory SplittingabstractSMT-based verification of low-level code requires modeling and reasoning about memory operations. Prior work has shown that optimizing memory representations is beneficial for scaling verification—pointer analysis, for example can be used to split memory into disjoint regions leading to faster SMT solving. However, these techniques are mostly designed for C and C++ programs with explicit operations for memory allocation which are not present in all languages. For instance, on the Ethereum virtual machine, memory is simply a monolithic array of bytes which can be freely accessed by Ethereum bytecode, and there is no allocation primitive. In this paper, we present a memory splitting transformation guided by a conservative memory analysis for Ethereum bytecode generated by the Solidity compiler. The analysis consists of two phases: recovering memory allocation and memory regions, followed by a pointer analysis. The goal of the analysis is to enable memory splitting which in turn speeds up verification. We have implemented both the analysis and the memory splitting transformation as part of a verification tool, CertoraProver, and show that the transformation speeds up SMT solving by up to 120× and additionally mitigates 16 timeouts when used on 229 real-world smart contract verification tasks. Shelly Grossman, John Toman, Alexander Bakst, Sameer Arora, Shmuel Sagiv, Chandrakana Nandi |
Proc. ACM Program. Lang. | 2 |
| 2020 | ConSORT: Context- and Flow-Sensitive Ownership Refinement Types for Imperative ProgramsabstractAbstract We present ConSORT, a type system for safety verification in the presence of mutability and aliasing. Mutability requires strong updates to model changing invariants during program execution, but aliasing between pointers makes it difficult to determine which invariants must be updated in response to mutation. Our type system addresses this difficulty with a novel combination of refinement types and fractional ownership types. Fractional ownership types provide flow-sensitive and precise aliasing information for reference variables. ConSORT interprets this ownership information to soundly handle strong updates of potentially aliased references. We have proved ConSORT sound and implemented a prototype, fully automated inference tool. We evaluated our tool and found it verifies non-trivial programs including data structure implementations. John Toman, Ren Siqi, Kohei Suenaga, Atsushi Igarashi, Naoki Kobayashi 0001 |
ESOP | 1 |
| 2019 | Concerto: a framework for combined concrete and abstract interpretationabstractAbstract interpretation promises sound but computable static summarization of program behavior. However, modern software engineering practices pose significant challenges to this vision, specifically the extensive use of frameworks and complex libraries. Frameworks heavily use reflection, metaprogramming, and multiple layers of abstraction, all of which confound even state-of-the-art abstract interpreters. Sound but conservative analysis of frameworks is impractically imprecise, and unsoundly ignoring reflection and metaprogramming is untenable given the prevalence of these features. Manually modeling framework behaviors offers excellent precision, at the cost of immense effort by the tool designer. To overcome the above difficulties, we present Concerto, a system for analyzing framework-based applications by soundly combining concrete and abstract interpretation. Concerto analyzes framework implementations using concrete interpretation, and application code using abstract interpretation. This technique is possible in practice as framework implementations typically follow a single path of execution when provided a concrete, application-specific configuration file which is often available at analysis time. Concerto exploits this configuration information to precisely resolve reflection and other metaprogramming idioms during concrete execution. In contrast, application code may have infinitely many paths of execution, so Concerto switches to abstract interpretation to analyze application code. Concerto is an analysis framework, and can be instantiated with any abstract interpretation that satisfies a small set of preconditions. In addition, unlike manual modeling, Concerto is not specialized to any specific framework implementation. We have formalized our approach and proved several important properties including soundness and termination. In addition, we have implemented an initial proof of concept prototype of Concerto for a subset of Java, and found that our combined interpretation significantly improves analysis precision and performance. John Toman, Dan Grossman |
Proc. ACM Program. Lang. | 1 |
| 2018 | Legato: An At-Most-Once Analysis with Applications to Dynamic Configuration UpdatesabstractModern software increasingly relies on external resources whose location or content can change during program execution. Examples of such resources include remote network hosts, database entries, dynamically updated configuration options, etc. Long running, adaptable programs must handle these changes gracefully and correctly. Dealing with all possible resource update scenarios is difficult to get right, especially if, as is common, external resources can be modified without prior warning by code and/or users outside of the application's direct control. If a resource unexpectedly changes during a computation, an application may observe multiple, inconsistent states of the resource, leading to incorrect program behavior. This paper presents a sound and precise static analysis, Legato, that verifies programs correctly handle changes in external resources. Our analysis ensures that every value computed by an application reflects a single, consistent version of every external resource's state. Although consistent computation in the presence of concurrent resource updates is fundamentally a concurrency issue, our analysis relies on the novel at-most-once condition to avoid explicitly reasoning about concurrency. The at-most-once condition requires that all values depend on at most one access of each resource. Our analysis is flow-, field-, and context-sensitive. It scales to real-world Java programs while producing a moderate number of false positives. We applied Legato to 10 applications with dynamically updated configurations, and found several non-trivial consistency bugs. John Toman, Dan Grossman |
ECOOP | 1 |
| 2016 | Staccato: A Bug Finder for Dynamic Configuration UpdatesabstractModern software applications are highly configurable, allowing configuration options to be changed even during program execution. When dynamic configuration updating is implemented incorrectly, program errors can result. These program errors occur primarily when stale data—computed from old configurations—or inconsistent data—computed from different configurations—are used. We introduce Staccato, the first tool designed to detect these errors. Staccato uses a dynamic analysis in the style of taint analysis to find the use of stale configuration data in Java programs. It supports concurrent programs running on commodity JVMs. In some cases, Staccato can provide automatic bug avoidance and semi-automatic repair when errors occur. We evaluated Staccato on 3 open-source applications that support complex reconfigurability. Staccato found multiple errors in all of them. Staccato requires only modest annotation overhead and has moderate performance overhead. John Toman, Dan Grossman |
ECOOP | 1 |
| 2015 | Crust: A Bounded Verifier for Rust (N)abstractRust is a modern systems language that provides guaranteed memory safety through static analysis. However, Rust includes an escape hatch in the form of "unsafe code," which the compiler assumes to be memory safe and to preserve crucial pointer aliasing invariants. Unsafe code appears in many data structure implementations and other essential libraries, and bugs in this code can lead to memory safety violations in parts of the program that the compiler otherwise proved safe. We present CRUST, a tool combining exhaustive test generation and bounded model checking to detect memory safety errors, as well as violations of Rust's pointer aliasing invariants within unsafe library code. CRUST requires no programmer annotations, only an indication of the modules to check. We evaluate CRUSTon data structures from the Rust standard library. It detects memory safety bugs that arose during the library's development and remained undetected for several months. John Toman, Stuart Pernsteiner, Emina Torlak |
ASE | 1 |