Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PROGnosticator: Testing Source-to-Source Code Translators via Construct-oriented Fuzzing

PROGnosticator logo

This repository provides the source code for PROGnosticator: a construct-oriented prototype fuzzer for source-to-source code translators.

This work is presented in our paper PROGnosticator: Testing Source-to-Source Code Translators via Construct-oriented Fuzzing, appearing in the 2026 ACM International Conference on the Foundations of Software Engineering (FSE’26).


PROGnosticator workflow

Citing this repository: @article{arafat:PROGnosticator, title = {PROGnosticator: Testing Source-to-Source Code Translators via Construct-oriented Fuzzing}, author = {Yeaseen Arafat and Stefan Nagy}, year = {2026}, issue_date = {July 2026}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {3}, number = {FSE}, journal = {Proc. ACM Softw. Eng.}}
Maintainers: Yeaseen Arafat (y.arafat@utah.edu) and Stefan Nagy (snagy@cs.utah.edu)
License: MIT License
Disclaimer: This software is provided as-is with no warranty.

Using PROGnosticator

Install Prerequisite Packages

Install prerequisite packages by running setup.sh.

Fuzzing a Transpiler

We provide example transpiler fuzzing setups in transpilers (e.g. c2rust, go2hx, etc.). Each folder contains sample programs, a PROGnosticatoring.py launcher, and a short README.

Replicating a per-transpiler fuzzing setup generally requires the following:

  1. Ensure the transpiler binary itself (e.g., c2rust) and any other necessary binaries (e.g., clang) are all accessible from your $PATH environment (details in each corresponding README).
  2. Use the matching PROGnosticator-generated dataset from dataset, e.g., dataset/c_dataset.zip for C-input transpilers.
  3. From the target transpiler folder, run: python3 PROGnosticatoring.py <input_program_folder> <campaign_id>.
  4. Fuzzing campaign outputs are written to a local campaign directory: campaign_<campaign_id>.

Additional Notes

Below are instructions for extending PROGnosticator:

Running for a Supported Language

Supported language keys are: c, go, js, rust, python, and java. To try Rust:

  1. Set your OpenAI API key export OPENAI_API_KEY="your_openai_api_key_here"
  2. Run: cd core && python main.py -F rust 0.2 2 10 --model gpt-4.
  3. See core/README.md for command options and parameter meanings.
  4. Generated Rust programs are saved under: core/construct_oriented_program_generator/language/rust/programs/.
  5. Enumerated Rust constructs are saved under: core/construct_storage/rust/.

Supporting Other Languages

For setting up a new language, such as C++, follow core/support_new_language.md.

Supporting Other Transpilers

Follow any existing example in transpilers. Each transpiler folder contains a Python launcher script and sample seeds.

Bug Trophy Case

Transpiler Reported Bugs
C2Rust immunant/c2rust#1165, immunant/c2rust#1166, immunant/c2rust#1168, immunant/c2rust#1171, immunant/c2rust#1208, immunant/c2rust#1184, immunant/c2rust#1217, immunant/c2rust#1231, immunant/c2rust#1233, immunant/c2rust#1234, immunant/c2rust#1236, immunant/c2rust#1237, immunant/c2rust#1238, immunant/c2rust#1239, immunant/c2rust#1240
Go2Hx go2hx/go2hx#183, go2hx/go2hx#184, go2hx/go2hx#185, go2hx/go2hx#186, go2hx/go2hx#187, go2hx/go2hx#226, go2hx/go2hx#222, go2hx/go2hx#225, go2hx/go2hx#188, go2hx/go2hx#230, go2hx/go2hx#231, go2hx/go2hx#232, go2hx/go2hx#256, go2hx/go2hx#276, go2hx/go2hx#277
Zig Translate-C ziglang/zig#22045, ziglang/zig#22136, ziglang/zig#22139, ziglang/zig#22964, ziglang/zig#23283, ziglang/zig#22148, ziglang/zig#23975, ziglang/zig#23987, ziglang/zig#24010
CxGo gotranspile/cxgo#90, gotranspile/cxgo#91, gotranspile/cxgo#92, gotranspile/cxgo#93, gotranspile/cxgo#95, gotranspile/cxgo#96, gotranspile/cxgo#97, gotranspile/cxgo#98, gotranspile/cxgo#99, gotranspile/cxgo#100, gotranspile/cxgo#101
SWC swc-project/swc#11039, swc-project/swc#11040, swc-project/swc#11045, swc-project/swc#11046, swc-project/swc#11047, swc-project/swc#11048, swc-project/swc#11049, swc-project/swc#11050, swc-project/swc#11051, swc-project/swc#11052
TinyGo tinygo-org/tinygo#4786, tinygo-org/tinygo#4819
Babel babel/babel#17190, babel/babel#17502

If you find new bugs using PROGnosticator, please let us know!

Acknowledgement

This material is based upon work supported by the National Science Foundation (NSF) under Award No. 2419798, and by the Defense Advanced Research Projects Agency (DARPA) under Award No. FA8750-24-2-0002, Subaward No. GR105409-SUB00001384.

About

PROGnosticator: Testing Source-to-Source Code Translators via Construct-oriented Fuzzing

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages