[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-trail-of-bits-ossfuzz":3,"mdc-y1d05k-key":38,"related-org-trail-of-bits-ossfuzz":3483,"related-repo-trail-of-bits-ossfuzz":3631},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":33,"sourceUrl":36,"mdContent":37},"ossfuzz","set up continuous fuzzing infrastructure","OSS-Fuzz provides free continuous fuzzing for open source projects. Use when setting up continuous fuzzing infrastructure or enrolling projects.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"trail-of-bits","Trail of Bits","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftrail-of-bits.png","trailofbits",[13,17,20,23],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"CI\u002FCD","ci-cd",{"name":24,"slug":25,"type":16},"Testing","testing",6139,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills","2026-07-17T06:05:18.59585",null,541,[32],"agent-skills",{"repoUrl":27,"stars":26,"forks":30,"topics":34,"description":35},[32],"Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows","https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills\u002Ftree\u002FHEAD\u002Fplugins\u002Ftesting-handbook-skills\u002Fskills\u002Fossfuzz","---\nname: ossfuzz\ntype: technique\ndescription: >\n  OSS-Fuzz provides free continuous fuzzing for open source projects.\n  Use when setting up continuous fuzzing infrastructure or enrolling projects.\n---\n\n# OSS-Fuzz\n\n[OSS-Fuzz](https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002F) is an open-source project developed by Google that provides free distributed infrastructure for continuous fuzz testing. It streamlines the fuzzing process and facilitates simpler modifications. While only select projects are accepted into OSS-Fuzz, the project's core is open-source, allowing anyone to host their own instance for private projects.\n\n## Overview\n\nOSS-Fuzz provides a simple CLI framework for building and starting harnesses or calculating their coverage. Additionally, OSS-Fuzz can be used as a service that hosts static web pages generated from fuzzing outputs such as coverage information.\n\n### Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| **helper.py** | CLI script for building images, building fuzzers, and running harnesses locally |\n| **Base Images** | Hierarchical Docker images providing build dependencies and compilers |\n| **project.yaml** | Configuration file defining project metadata for OSS-Fuzz enrollment |\n| **Dockerfile** | Project-specific image with build dependencies |\n| **build.sh** | Script that builds fuzzing harnesses for your project |\n| **Criticality Score** | Metric used by OSS-Fuzz team to evaluate project acceptance |\n\n## When to Apply\n\n**Apply this technique when:**\n- Setting up continuous fuzzing for an open-source project\n- Need distributed fuzzing infrastructure without managing servers\n- Want coverage reports and bug tracking integrated with fuzzing\n- Testing existing OSS-Fuzz harnesses locally\n- Reproducing crashes from OSS-Fuzz bug reports\n\n**Skip this technique when:**\n- Project is closed-source (unless hosting your own OSS-Fuzz instance)\n- Project doesn't meet OSS-Fuzz's criticality score threshold\n- Need proprietary or specialized fuzzing infrastructure\n- Fuzzing simple scripts that don't warrant infrastructure\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Clone OSS-Fuzz | `git clone https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz` |\n| Build project image | `python3 infra\u002Fhelper.py build_image --pull \u003Cproject>` |\n| Build fuzzers with ASan | `python3 infra\u002Fhelper.py build_fuzzers --sanitizer=address \u003Cproject>` |\n| Run specific harness | `python3 infra\u002Fhelper.py run_fuzzer \u003Cproject> \u003Charness>` |\n| Generate coverage report | `python3 infra\u002Fhelper.py coverage \u003Cproject>` |\n| Check helper.py options | `python3 infra\u002Fhelper.py --help` |\n\n## OSS-Fuzz Project Components\n\nOSS-Fuzz provides several publicly available tools and web interfaces:\n\n### Bug Tracker\n\nThe [bug tracker](https:\u002F\u002Fissues.oss-fuzz.com\u002Fissues?q=status:open) allows you to:\n- Check bugs from specific projects (initially visible only to maintainers, later [made public](https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fgetting-started\u002Fbug-disclosure-guidelines\u002F))\n- Create new issues and comment on existing ones\n- Search for similar bugs across **all projects** to understand issues\n\n### Build Status System\n\nThe [build status system](https:\u002F\u002Foss-fuzz-build-logs.storage.googleapis.com\u002Findex.html) helps track:\n- Build statuses of all included projects\n- Date of last successful build\n- Build failures and their duration\n\n### Fuzz Introspector\n\n[Fuzz Introspector](https:\u002F\u002Foss-fuzz-introspector.storage.googleapis.com\u002Findex.html) displays:\n- Coverage data for projects enrolled in OSS-Fuzz\n- Hit frequency for covered code\n- Performance analysis and blocker identification\n\nRead [this case study](https:\u002F\u002Fgithub.com\u002Fossf\u002Ffuzz-introspector\u002Fblob\u002Fmain\u002Fdoc\u002FCaseStudies.md) for examples and explanations.\n\n## Step-by-Step: Running a Single Harness\n\nYou don't need to host the whole OSS-Fuzz platform to use it. The helper script makes it easy to run individual harnesses locally.\n\n### Step 1: Clone OSS-Fuzz\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\ncd oss-fuzz\npython3 infra\u002Fhelper.py --help\n```\n\n### Step 2: Build Project Image\n\n```bash\npython3 infra\u002Fhelper.py build_image --pull \u003Cproject-name>\n```\n\nThis downloads and builds the base Docker image for the project.\n\n### Step 3: Build Fuzzers with Sanitizers\n\n```bash\npython3 infra\u002Fhelper.py build_fuzzers --sanitizer=address \u003Cproject-name>\n```\n\n**Sanitizer options:**\n- `--sanitizer=address` for [AddressSanitizer](https:\u002F\u002Fappsec.guide\u002Fdocs\u002Ffuzzing\u002Ftechniques\u002Fasan\u002F) with [LeakSanitizer](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fsanitizers\u002Fwiki\u002FAddressSanitizerLeakSanitizer)\n- Other sanitizers available (language support varies)\n\n**Note:** Fuzzers are built to `\u002Fbuild\u002Fout\u002F\u003Cproject-name>\u002F` containing the harness executables, dictionaries, corpus, and crash files.\n\n### Step 4: Run the Fuzzer\n\n```bash\npython3 infra\u002Fhelper.py run_fuzzer \u003Cproject-name> \u003Charness-name> [\u003Cfuzzer-args>]\n```\n\nThe helper script automatically runs any missed steps if you skip them.\n\n### Step 5: Coverage Analysis (Optional)\n\nFirst, [install gsutil](https:\u002F\u002Fcloud.google.com\u002Fstorage\u002Fdocs\u002Fgsutil_install) (skip gcloud initialization).\n\n```bash\npython3 infra\u002Fhelper.py build_fuzzers --sanitizer=coverage \u003Cproject-name>\npython3 infra\u002Fhelper.py coverage \u003Cproject-name>\n```\n\nUse `--no-corpus-download` to use only local corpus. The command generates and hosts a coverage report locally.\n\nSee [official OSS-Fuzz documentation](https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fadvanced-topics\u002Fcode-coverage\u002F) for details.\n\n## Common Patterns\n\n### Pattern: Running irssi Example\n\n**Use Case:** Testing OSS-Fuzz setup with a simple enrolled project\n\n```bash\n# Clone and navigate to OSS-Fuzz\ngit clone https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\ncd oss-fuzz\n\n# Build and run irssi fuzzer\npython3 infra\u002Fhelper.py build_image --pull irssi\npython3 infra\u002Fhelper.py build_fuzzers --sanitizer=address irssi\npython3 infra\u002Fhelper.py run_fuzzer irssi irssi-fuzz\n```\n\n**Expected Output:**\n```\nINFO:__main__:Running: docker run --rm --privileged --shm-size=2g --platform linux\u002Famd64 -i -e FUZZING_ENGINE=libfuzzer -e SANITIZER=address -e RUN_FUZZER_MODE=interactive -e HELPER=True -v \u002Fprivate\u002Ftmp\u002Foss-fuzz\u002Fbuild\u002Fout\u002Firssi:\u002Fout -t gcr.io\u002Foss-fuzz-base\u002Fbase-runner run_fuzzer irssi-fuzz.\nUsing seed corpus: irssi-fuzz_seed_corpus.zip\n\u002Fout\u002Firssi-fuzz -rss_limit_mb=2560 -timeout=25 \u002Ftmp\u002Firssi-fuzz_corpus -max_len=2048 \u003C \u002Fdev\u002Fnull\nINFO: Running with entropic power schedule (0xFF, 100).\nINFO: Seed: 1531341664\nINFO: Loaded 1 modules   (95687 inline 8-bit counters): 95687 [0x1096c80, 0x10ae247),\nINFO: Loaded 1 PC tables (95687 PCs): 95687 [0x10ae248,0x1223eb8),\nINFO:      719 files found in \u002Ftmp\u002Firssi-fuzz_corpus\nINFO: seed corpus: files: 719 min: 1b max: 170106b total: 367969b rss: 48Mb\n#720        INITED cov: 409 ft: 1738 corp: 640\u002F163Kb exec\u002Fs: 0 rss: 62Mb\n#762        REDUCE cov: 409 ft: 1738 corp: 640\u002F163Kb lim: 2048 exec\u002Fs: 0 rss: 63Mb L: 236\u002F2048 MS: 2 ShuffleBytes-EraseBytes-\n```\n\n### Pattern: Enrolling a New Project\n\n**Use Case:** Adding your project to OSS-Fuzz (or private instance)\n\nCreate three files in `projects\u002F\u003Cyour-project>\u002F`:\n\n**1. project.yaml** - Project metadata:\n```yaml\nhomepage: \"https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\"\nlanguage: c++\nprimary_contact: \"your-email@example.com\"\nmain_repo: \"https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\"\nfuzzing_engines:\n  - libfuzzer\nsanitizers:\n  - address\n  - undefined\n```\n\n**2. Dockerfile** - Build dependencies:\n```dockerfile\nFROM gcr.io\u002Foss-fuzz-base\u002Fbase-builder\nRUN apt-get update && apt-get install -y \\\n    autoconf \\\n    automake \\\n    libtool \\\n    pkg-config\nRUN git clone --depth 1 https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\nWORKDIR yourproject\nCOPY build.sh $SRC\u002F\n```\n\n**3. build.sh** - Build harnesses:\n```bash\n#!\u002Fbin\u002Fbash -eu\n.\u002Fautogen.sh\n.\u002Fconfigure --disable-shared\nmake -j$(nproc)\n\n# Build harnesses\n$CXX $CXXFLAGS -std=c++11 -I. \\\n    $SRC\u002Fyourproject\u002Ffuzz\u002Fharness.cc -o $OUT\u002Fharness \\\n    $LIB_FUZZING_ENGINE .\u002Flibyourproject.a\n\n# Copy corpus and dictionary if available\ncp $SRC\u002Fyourproject\u002Ffuzz\u002Fcorpus.zip $OUT\u002Fharness_seed_corpus.zip\ncp $SRC\u002Fyourproject\u002Ffuzz\u002Fdictionary.dict $OUT\u002Fharness.dict\n```\n\n## Docker Images in OSS-Fuzz\n\nHarnesses are built and executed in Docker containers. All projects share a runner image, but each project has its own build image.\n\n### Image Hierarchy\n\nImages build on each other in this sequence:\n\n1. **[base_image](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fblob\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-image\u002FDockerfile)** - Specific Ubuntu version\n2. **[base_clang](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-clang)** - Clang compiler; based on `base_image`\n3. **[base_builder](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-builder)** - Build dependencies; based on `base_clang`\n   - Language-specific variants: [`base_builder_go`](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-builder-go), etc.\n   - See [\u002Foss-fuzz\u002Finfra\u002Fbase-images\u002F](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images) for full list\n4. **Your project Docker image** - Project-specific dependencies; based on `base_builder` or language variant\n\n### Runner Images (Used Separately)\n\n- **[base_runner](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-runner)** - Executes harnesses; based on `base_clang`\n- **[base_runner_debug](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-runner-debug)** - With debug tools; based on `base_runner`\n\n## Advanced Usage\n\n### Tips and Tricks\n\n| Tip | Why It Helps |\n|-----|--------------|\n| **Don't manually copy source code** | Project Dockerfile likely already pulls latest version |\n| **Check existing projects** | Browse [oss-fuzz\u002Fprojects](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Fprojects) for examples |\n| **Keep harnesses in separate repo** | Like [curl-fuzzer](https:\u002F\u002Fgithub.com\u002Fcurl\u002Fcurl-fuzzer) - cleaner organization |\n| **Use specific compiler versions** | Base images provide consistent build environment |\n| **Install dependencies in Dockerfile** | May require approval for OSS-Fuzz enrollment |\n\n### Criticality Score\n\nOSS-Fuzz uses a [criticality score](https:\u002F\u002Fgithub.com\u002Fossf\u002Fcriticality_score) to evaluate project acceptance. See [this example](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fpull\u002F11444#issuecomment-1875907472) for how scoring works.\n\nProjects with lower scores may still be added to private OSS-Fuzz instances.\n\n### Hosting Your Own Instance\n\nSince OSS-Fuzz is open-source, you can host your own instance for:\n- Private projects not eligible for public OSS-Fuzz\n- Projects with lower criticality scores\n- Custom fuzzing infrastructure needs\n\n## Anti-Patterns\n\n| Anti-Pattern | Problem | Correct Approach |\n|--------------|---------|------------------|\n| **Manually pulling source in build.sh** | Doesn't use latest version | Let Dockerfile handle git clone |\n| **Copying code to OSS-Fuzz repo** | Hard to maintain, violates separation | Reference external harness repo |\n| **Ignoring base image versions** | Build inconsistencies | Use provided base images and compilers |\n| **Skipping local testing** | Wastes CI resources | Use helper.py locally before PR |\n| **Not checking build status** | Unnoticed build failures | Monitor build status page regularly |\n\n## Tool-Specific Guidance\n\n### libFuzzer\n\nOSS-Fuzz primarily uses libFuzzer as the fuzzing engine for C\u002FC++ projects.\n\n**Harness signature:**\n```c++\nextern \"C\" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {\n    \u002F\u002F Your fuzzing logic\n    return 0;\n}\n```\n\n**Build in build.sh:**\n```bash\n$CXX $CXXFLAGS -std=c++11 -I. \\\n    harness.cc -o $OUT\u002Fharness \\\n    $LIB_FUZZING_ENGINE .\u002Flibproject.a\n```\n\n**Integration tips:**\n- Use `$LIB_FUZZING_ENGINE` variable provided by OSS-Fuzz\n- Include `-fsanitize=fuzzer` is handled automatically\n- Link against static libraries when possible\n\n### AFL++\n\nOSS-Fuzz supports AFL++ as an alternative fuzzing engine.\n\n**Enable in project.yaml:**\n```yaml\nfuzzing_engines:\n  - afl\n  - libfuzzer\n```\n\n**Integration tips:**\n- AFL++ harnesses work alongside libFuzzer harnesses\n- Use persistent mode for better performance\n- OSS-Fuzz handles engine-specific compilation flags\n\n### Atheris (Python)\n\nFor Python projects with C extensions.\n\n**Example from [cbor2 integration](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fpull\u002F11444):**\n\n**Harness:**\n```python\nimport atheris\nimport sys\nimport cbor2\n\n@atheris.instrument_func\ndef TestOneInput(data):\n    fdp = atheris.FuzzedDataProvider(data)\n    try:\n        cbor2.loads(data)\n    except (cbor2.CBORDecodeError, ValueError):\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, TestOneInput)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n**Build in build.sh:**\n```bash\npip3 install .\nfor fuzzer in $(find $SRC -name 'fuzz_*.py'); do\n  compile_python_fuzzer $fuzzer\ndone\n```\n\n**Integration tips:**\n- Use `compile_python_fuzzer` helper provided by OSS-Fuzz\n- See [Continuously Fuzzing Python C Extensions](https:\u002F\u002Fblog.trailofbits.com\u002F2024\u002F02\u002F23\u002Fcontinuously-fuzzing-python-c-extensions\u002F) blog post\n\n### Rust Projects\n\n**Enable in project.yaml:**\n```yaml\nlanguage: rust\nfuzzing_engines:\n  - libfuzzer\nsanitizers:\n  - address  # Only AddressSanitizer supported for Rust\n```\n\n**Build in build.sh:**\n```bash\ncargo fuzz build -O --debug-assertions\ncp fuzz\u002Ftarget\u002Fx86_64-unknown-linux-gnu\u002Frelease\u002Ffuzz_target_1 $OUT\u002F\n```\n\n**Integration tips:**\n- [Rust supports only AddressSanitizer with libfuzzer](https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fgetting-started\u002Fnew-project-guide\u002Frust-lang\u002F#projectyaml)\n- Use cargo-fuzz for local development\n- OSS-Fuzz handles Rust-specific compilation\n\n## Troubleshooting\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| **Build fails with missing dependencies** | Dependencies not in Dockerfile | Add `apt-get install` or equivalent in Dockerfile |\n| **Harness crashes immediately** | Missing input validation | Add size checks in harness |\n| **Coverage is 0%** | Harness not reaching target code | Verify harness actually calls target functions |\n| **Build timeout** | Complex build process | Optimize build.sh, consider parallel builds |\n| **Sanitizer errors in build** | Incompatible flags | Use flags provided by OSS-Fuzz environment variables |\n| **Cannot find source code** | Wrong working directory in Dockerfile | Set WORKDIR or use absolute paths |\n\n## Related Skills\n\n### Tools That Use This Technique\n\n| Skill | How It Applies |\n|-------|----------------|\n| **libfuzzer** | Primary fuzzing engine used by OSS-Fuzz |\n| **aflpp** | Alternative fuzzing engine supported by OSS-Fuzz |\n| **atheris** | Used for fuzzing Python projects in OSS-Fuzz |\n| **cargo-fuzz** | Used for Rust projects in OSS-Fuzz |\n\n### Related Techniques\n\n| Skill | Relationship |\n|-------|--------------|\n| **coverage-analysis** | OSS-Fuzz generates coverage reports via helper.py |\n| **address-sanitizer** | Default sanitizer for OSS-Fuzz projects |\n| **fuzz-harness-writing** | Essential for enrolling projects in OSS-Fuzz |\n| **corpus-management** | OSS-Fuzz maintains corpus for enrolled projects |\n\n## Resources\n\n### Key External Resources\n\n**[OSS-Fuzz Official Documentation](https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002F)**\nComprehensive documentation covering enrollment, harness writing, and troubleshooting for the OSS-Fuzz platform.\n\n**[Getting Started Guide](https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fgetting-started\u002Faccepting-new-projects\u002F)**\nStep-by-step process for enrolling new projects into OSS-Fuzz, including requirements and approval process.\n\n**[cbor2 OSS-Fuzz Integration PR](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fpull\u002F11444)**\nReal-world example of enrolling a Python project with C extensions into OSS-Fuzz. Shows:\n- Initial proposal and project introduction\n- Criticality score evaluation\n- Complete implementation (project.yaml, Dockerfile, build.sh, harnesses)\n\n**[Fuzz Introspector Case Studies](https:\u002F\u002Fgithub.com\u002Fossf\u002Ffuzz-introspector\u002Fblob\u002Fmain\u002Fdoc\u002FCaseStudies.md)**\nExamples and explanations of using Fuzz Introspector to analyze coverage and identify fuzzing blockers.\n\n### Video Resources\n\nCheck OSS-Fuzz documentation for workshop recordings and tutorials on enrollment and harness development.\n",{"data":39,"body":41},{"name":4,"type":40,"description":6},"technique",{"type":42,"children":43},"root",[44,53,67,74,79,86,211,217,225,255,263,286,292,417,423,428,434,448,482,488,501,519,525,536,554,568,574,579,585,653,659,709,714,720,764,772,807,825,831,893,898,904,918,993,1006,1020,1026,1032,1042,1178,1186,1196,1202,1211,1224,1234,1400,1410,1491,1501,1724,1730,1735,1741,1746,1856,1862,1905,1911,1917,2037,2042,2065,2070,2076,2081,2099,2105,2237,2243,2249,2254,2262,2303,2311,2377,2385,2418,2424,2429,2437,2478,2485,2503,2509,2514,2530,2538,2693,2700,2810,2817,2845,2851,2858,2931,2938,2994,3001,3024,3030,3191,3197,3203,3288,3294,3379,3385,3391,3405,3420,3434,3452,3466,3472,3477],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"oss-fuzz",[50],{"type":51,"value":52},"text","OSS-Fuzz",{"type":45,"tag":54,"props":55,"children":56},"p",{},[57,65],{"type":45,"tag":58,"props":59,"children":63},"a",{"href":60,"rel":61},"https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002F",[62],"nofollow",[64],{"type":51,"value":52},{"type":51,"value":66}," is an open-source project developed by Google that provides free distributed infrastructure for continuous fuzz testing. It streamlines the fuzzing process and facilitates simpler modifications. While only select projects are accepted into OSS-Fuzz, the project's core is open-source, allowing anyone to host their own instance for private projects.",{"type":45,"tag":68,"props":69,"children":71},"h2",{"id":70},"overview",[72],{"type":51,"value":73},"Overview",{"type":45,"tag":54,"props":75,"children":76},{},[77],{"type":51,"value":78},"OSS-Fuzz provides a simple CLI framework for building and starting harnesses or calculating their coverage. Additionally, OSS-Fuzz can be used as a service that hosts static web pages generated from fuzzing outputs such as coverage information.",{"type":45,"tag":80,"props":81,"children":83},"h3",{"id":82},"key-concepts",[84],{"type":51,"value":85},"Key Concepts",{"type":45,"tag":87,"props":88,"children":89},"table",{},[90,109],{"type":45,"tag":91,"props":92,"children":93},"thead",{},[94],{"type":45,"tag":95,"props":96,"children":97},"tr",{},[98,104],{"type":45,"tag":99,"props":100,"children":101},"th",{},[102],{"type":51,"value":103},"Concept",{"type":45,"tag":99,"props":105,"children":106},{},[107],{"type":51,"value":108},"Description",{"type":45,"tag":110,"props":111,"children":112},"tbody",{},[113,131,147,163,179,195],{"type":45,"tag":95,"props":114,"children":115},{},[116,126],{"type":45,"tag":117,"props":118,"children":119},"td",{},[120],{"type":45,"tag":121,"props":122,"children":123},"strong",{},[124],{"type":51,"value":125},"helper.py",{"type":45,"tag":117,"props":127,"children":128},{},[129],{"type":51,"value":130},"CLI script for building images, building fuzzers, and running harnesses locally",{"type":45,"tag":95,"props":132,"children":133},{},[134,142],{"type":45,"tag":117,"props":135,"children":136},{},[137],{"type":45,"tag":121,"props":138,"children":139},{},[140],{"type":51,"value":141},"Base Images",{"type":45,"tag":117,"props":143,"children":144},{},[145],{"type":51,"value":146},"Hierarchical Docker images providing build dependencies and compilers",{"type":45,"tag":95,"props":148,"children":149},{},[150,158],{"type":45,"tag":117,"props":151,"children":152},{},[153],{"type":45,"tag":121,"props":154,"children":155},{},[156],{"type":51,"value":157},"project.yaml",{"type":45,"tag":117,"props":159,"children":160},{},[161],{"type":51,"value":162},"Configuration file defining project metadata for OSS-Fuzz enrollment",{"type":45,"tag":95,"props":164,"children":165},{},[166,174],{"type":45,"tag":117,"props":167,"children":168},{},[169],{"type":45,"tag":121,"props":170,"children":171},{},[172],{"type":51,"value":173},"Dockerfile",{"type":45,"tag":117,"props":175,"children":176},{},[177],{"type":51,"value":178},"Project-specific image with build dependencies",{"type":45,"tag":95,"props":180,"children":181},{},[182,190],{"type":45,"tag":117,"props":183,"children":184},{},[185],{"type":45,"tag":121,"props":186,"children":187},{},[188],{"type":51,"value":189},"build.sh",{"type":45,"tag":117,"props":191,"children":192},{},[193],{"type":51,"value":194},"Script that builds fuzzing harnesses for your project",{"type":45,"tag":95,"props":196,"children":197},{},[198,206],{"type":45,"tag":117,"props":199,"children":200},{},[201],{"type":45,"tag":121,"props":202,"children":203},{},[204],{"type":51,"value":205},"Criticality Score",{"type":45,"tag":117,"props":207,"children":208},{},[209],{"type":51,"value":210},"Metric used by OSS-Fuzz team to evaluate project acceptance",{"type":45,"tag":68,"props":212,"children":214},{"id":213},"when-to-apply",[215],{"type":51,"value":216},"When to Apply",{"type":45,"tag":54,"props":218,"children":219},{},[220],{"type":45,"tag":121,"props":221,"children":222},{},[223],{"type":51,"value":224},"Apply this technique when:",{"type":45,"tag":226,"props":227,"children":228},"ul",{},[229,235,240,245,250],{"type":45,"tag":230,"props":231,"children":232},"li",{},[233],{"type":51,"value":234},"Setting up continuous fuzzing for an open-source project",{"type":45,"tag":230,"props":236,"children":237},{},[238],{"type":51,"value":239},"Need distributed fuzzing infrastructure without managing servers",{"type":45,"tag":230,"props":241,"children":242},{},[243],{"type":51,"value":244},"Want coverage reports and bug tracking integrated with fuzzing",{"type":45,"tag":230,"props":246,"children":247},{},[248],{"type":51,"value":249},"Testing existing OSS-Fuzz harnesses locally",{"type":45,"tag":230,"props":251,"children":252},{},[253],{"type":51,"value":254},"Reproducing crashes from OSS-Fuzz bug reports",{"type":45,"tag":54,"props":256,"children":257},{},[258],{"type":45,"tag":121,"props":259,"children":260},{},[261],{"type":51,"value":262},"Skip this technique when:",{"type":45,"tag":226,"props":264,"children":265},{},[266,271,276,281],{"type":45,"tag":230,"props":267,"children":268},{},[269],{"type":51,"value":270},"Project is closed-source (unless hosting your own OSS-Fuzz instance)",{"type":45,"tag":230,"props":272,"children":273},{},[274],{"type":51,"value":275},"Project doesn't meet OSS-Fuzz's criticality score threshold",{"type":45,"tag":230,"props":277,"children":278},{},[279],{"type":51,"value":280},"Need proprietary or specialized fuzzing infrastructure",{"type":45,"tag":230,"props":282,"children":283},{},[284],{"type":51,"value":285},"Fuzzing simple scripts that don't warrant infrastructure",{"type":45,"tag":68,"props":287,"children":289},{"id":288},"quick-reference",[290],{"type":51,"value":291},"Quick Reference",{"type":45,"tag":87,"props":293,"children":294},{},[295,311],{"type":45,"tag":91,"props":296,"children":297},{},[298],{"type":45,"tag":95,"props":299,"children":300},{},[301,306],{"type":45,"tag":99,"props":302,"children":303},{},[304],{"type":51,"value":305},"Task",{"type":45,"tag":99,"props":307,"children":308},{},[309],{"type":51,"value":310},"Command",{"type":45,"tag":110,"props":312,"children":313},{},[314,332,349,366,383,400],{"type":45,"tag":95,"props":315,"children":316},{},[317,322],{"type":45,"tag":117,"props":318,"children":319},{},[320],{"type":51,"value":321},"Clone OSS-Fuzz",{"type":45,"tag":117,"props":323,"children":324},{},[325],{"type":45,"tag":326,"props":327,"children":329},"code",{"className":328},[],[330],{"type":51,"value":331},"git clone https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz",{"type":45,"tag":95,"props":333,"children":334},{},[335,340],{"type":45,"tag":117,"props":336,"children":337},{},[338],{"type":51,"value":339},"Build project image",{"type":45,"tag":117,"props":341,"children":342},{},[343],{"type":45,"tag":326,"props":344,"children":346},{"className":345},[],[347],{"type":51,"value":348},"python3 infra\u002Fhelper.py build_image --pull \u003Cproject>",{"type":45,"tag":95,"props":350,"children":351},{},[352,357],{"type":45,"tag":117,"props":353,"children":354},{},[355],{"type":51,"value":356},"Build fuzzers with ASan",{"type":45,"tag":117,"props":358,"children":359},{},[360],{"type":45,"tag":326,"props":361,"children":363},{"className":362},[],[364],{"type":51,"value":365},"python3 infra\u002Fhelper.py build_fuzzers --sanitizer=address \u003Cproject>",{"type":45,"tag":95,"props":367,"children":368},{},[369,374],{"type":45,"tag":117,"props":370,"children":371},{},[372],{"type":51,"value":373},"Run specific harness",{"type":45,"tag":117,"props":375,"children":376},{},[377],{"type":45,"tag":326,"props":378,"children":380},{"className":379},[],[381],{"type":51,"value":382},"python3 infra\u002Fhelper.py run_fuzzer \u003Cproject> \u003Charness>",{"type":45,"tag":95,"props":384,"children":385},{},[386,391],{"type":45,"tag":117,"props":387,"children":388},{},[389],{"type":51,"value":390},"Generate coverage report",{"type":45,"tag":117,"props":392,"children":393},{},[394],{"type":45,"tag":326,"props":395,"children":397},{"className":396},[],[398],{"type":51,"value":399},"python3 infra\u002Fhelper.py coverage \u003Cproject>",{"type":45,"tag":95,"props":401,"children":402},{},[403,408],{"type":45,"tag":117,"props":404,"children":405},{},[406],{"type":51,"value":407},"Check helper.py options",{"type":45,"tag":117,"props":409,"children":410},{},[411],{"type":45,"tag":326,"props":412,"children":414},{"className":413},[],[415],{"type":51,"value":416},"python3 infra\u002Fhelper.py --help",{"type":45,"tag":68,"props":418,"children":420},{"id":419},"oss-fuzz-project-components",[421],{"type":51,"value":422},"OSS-Fuzz Project Components",{"type":45,"tag":54,"props":424,"children":425},{},[426],{"type":51,"value":427},"OSS-Fuzz provides several publicly available tools and web interfaces:",{"type":45,"tag":80,"props":429,"children":431},{"id":430},"bug-tracker",[432],{"type":51,"value":433},"Bug Tracker",{"type":45,"tag":54,"props":435,"children":436},{},[437,439,446],{"type":51,"value":438},"The ",{"type":45,"tag":58,"props":440,"children":443},{"href":441,"rel":442},"https:\u002F\u002Fissues.oss-fuzz.com\u002Fissues?q=status:open",[62],[444],{"type":51,"value":445},"bug tracker",{"type":51,"value":447}," allows you to:",{"type":45,"tag":226,"props":449,"children":450},{},[451,465,470],{"type":45,"tag":230,"props":452,"children":453},{},[454,456,463],{"type":51,"value":455},"Check bugs from specific projects (initially visible only to maintainers, later ",{"type":45,"tag":58,"props":457,"children":460},{"href":458,"rel":459},"https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fgetting-started\u002Fbug-disclosure-guidelines\u002F",[62],[461],{"type":51,"value":462},"made public",{"type":51,"value":464},")",{"type":45,"tag":230,"props":466,"children":467},{},[468],{"type":51,"value":469},"Create new issues and comment on existing ones",{"type":45,"tag":230,"props":471,"children":472},{},[473,475,480],{"type":51,"value":474},"Search for similar bugs across ",{"type":45,"tag":121,"props":476,"children":477},{},[478],{"type":51,"value":479},"all projects",{"type":51,"value":481}," to understand issues",{"type":45,"tag":80,"props":483,"children":485},{"id":484},"build-status-system",[486],{"type":51,"value":487},"Build Status System",{"type":45,"tag":54,"props":489,"children":490},{},[491,492,499],{"type":51,"value":438},{"type":45,"tag":58,"props":493,"children":496},{"href":494,"rel":495},"https:\u002F\u002Foss-fuzz-build-logs.storage.googleapis.com\u002Findex.html",[62],[497],{"type":51,"value":498},"build status system",{"type":51,"value":500}," helps track:",{"type":45,"tag":226,"props":502,"children":503},{},[504,509,514],{"type":45,"tag":230,"props":505,"children":506},{},[507],{"type":51,"value":508},"Build statuses of all included projects",{"type":45,"tag":230,"props":510,"children":511},{},[512],{"type":51,"value":513},"Date of last successful build",{"type":45,"tag":230,"props":515,"children":516},{},[517],{"type":51,"value":518},"Build failures and their duration",{"type":45,"tag":80,"props":520,"children":522},{"id":521},"fuzz-introspector",[523],{"type":51,"value":524},"Fuzz Introspector",{"type":45,"tag":54,"props":526,"children":527},{},[528,534],{"type":45,"tag":58,"props":529,"children":532},{"href":530,"rel":531},"https:\u002F\u002Foss-fuzz-introspector.storage.googleapis.com\u002Findex.html",[62],[533],{"type":51,"value":524},{"type":51,"value":535}," displays:",{"type":45,"tag":226,"props":537,"children":538},{},[539,544,549],{"type":45,"tag":230,"props":540,"children":541},{},[542],{"type":51,"value":543},"Coverage data for projects enrolled in OSS-Fuzz",{"type":45,"tag":230,"props":545,"children":546},{},[547],{"type":51,"value":548},"Hit frequency for covered code",{"type":45,"tag":230,"props":550,"children":551},{},[552],{"type":51,"value":553},"Performance analysis and blocker identification",{"type":45,"tag":54,"props":555,"children":556},{},[557,559,566],{"type":51,"value":558},"Read ",{"type":45,"tag":58,"props":560,"children":563},{"href":561,"rel":562},"https:\u002F\u002Fgithub.com\u002Fossf\u002Ffuzz-introspector\u002Fblob\u002Fmain\u002Fdoc\u002FCaseStudies.md",[62],[564],{"type":51,"value":565},"this case study",{"type":51,"value":567}," for examples and explanations.",{"type":45,"tag":68,"props":569,"children":571},{"id":570},"step-by-step-running-a-single-harness",[572],{"type":51,"value":573},"Step-by-Step: Running a Single Harness",{"type":45,"tag":54,"props":575,"children":576},{},[577],{"type":51,"value":578},"You don't need to host the whole OSS-Fuzz platform to use it. The helper script makes it easy to run individual harnesses locally.",{"type":45,"tag":80,"props":580,"children":582},{"id":581},"step-1-clone-oss-fuzz",[583],{"type":51,"value":584},"Step 1: Clone OSS-Fuzz",{"type":45,"tag":586,"props":587,"children":592},"pre",{"className":588,"code":589,"language":590,"meta":591,"style":591},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\ncd oss-fuzz\npython3 infra\u002Fhelper.py --help\n","bash","",[593],{"type":45,"tag":326,"props":594,"children":595},{"__ignoreMap":591},[596,619,634],{"type":45,"tag":597,"props":598,"children":601},"span",{"class":599,"line":600},"line",1,[602,608,614],{"type":45,"tag":597,"props":603,"children":605},{"style":604},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[606],{"type":51,"value":607},"git",{"type":45,"tag":597,"props":609,"children":611},{"style":610},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[612],{"type":51,"value":613}," clone",{"type":45,"tag":597,"props":615,"children":616},{"style":610},[617],{"type":51,"value":618}," https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\n",{"type":45,"tag":597,"props":620,"children":622},{"class":599,"line":621},2,[623,629],{"type":45,"tag":597,"props":624,"children":626},{"style":625},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[627],{"type":51,"value":628},"cd",{"type":45,"tag":597,"props":630,"children":631},{"style":610},[632],{"type":51,"value":633}," oss-fuzz\n",{"type":45,"tag":597,"props":635,"children":637},{"class":599,"line":636},3,[638,643,648],{"type":45,"tag":597,"props":639,"children":640},{"style":604},[641],{"type":51,"value":642},"python3",{"type":45,"tag":597,"props":644,"children":645},{"style":610},[646],{"type":51,"value":647}," infra\u002Fhelper.py",{"type":45,"tag":597,"props":649,"children":650},{"style":610},[651],{"type":51,"value":652}," --help\n",{"type":45,"tag":80,"props":654,"children":656},{"id":655},"step-2-build-project-image",[657],{"type":51,"value":658},"Step 2: Build Project Image",{"type":45,"tag":586,"props":660,"children":662},{"className":588,"code":661,"language":590,"meta":591,"style":591},"python3 infra\u002Fhelper.py build_image --pull \u003Cproject-name>\n",[663],{"type":45,"tag":326,"props":664,"children":665},{"__ignoreMap":591},[666],{"type":45,"tag":597,"props":667,"children":668},{"class":599,"line":600},[669,673,677,682,687,693,698,704],{"type":45,"tag":597,"props":670,"children":671},{"style":604},[672],{"type":51,"value":642},{"type":45,"tag":597,"props":674,"children":675},{"style":610},[676],{"type":51,"value":647},{"type":45,"tag":597,"props":678,"children":679},{"style":610},[680],{"type":51,"value":681}," build_image",{"type":45,"tag":597,"props":683,"children":684},{"style":610},[685],{"type":51,"value":686}," --pull",{"type":45,"tag":597,"props":688,"children":690},{"style":689},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[691],{"type":51,"value":692}," \u003C",{"type":45,"tag":597,"props":694,"children":695},{"style":610},[696],{"type":51,"value":697},"project-nam",{"type":45,"tag":597,"props":699,"children":701},{"style":700},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[702],{"type":51,"value":703},"e",{"type":45,"tag":597,"props":705,"children":706},{"style":689},[707],{"type":51,"value":708},">\n",{"type":45,"tag":54,"props":710,"children":711},{},[712],{"type":51,"value":713},"This downloads and builds the base Docker image for the project.",{"type":45,"tag":80,"props":715,"children":717},{"id":716},"step-3-build-fuzzers-with-sanitizers",[718],{"type":51,"value":719},"Step 3: Build Fuzzers with Sanitizers",{"type":45,"tag":586,"props":721,"children":723},{"className":588,"code":722,"language":590,"meta":591,"style":591},"python3 infra\u002Fhelper.py build_fuzzers --sanitizer=address \u003Cproject-name>\n",[724],{"type":45,"tag":326,"props":725,"children":726},{"__ignoreMap":591},[727],{"type":45,"tag":597,"props":728,"children":729},{"class":599,"line":600},[730,734,738,743,748,752,756,760],{"type":45,"tag":597,"props":731,"children":732},{"style":604},[733],{"type":51,"value":642},{"type":45,"tag":597,"props":735,"children":736},{"style":610},[737],{"type":51,"value":647},{"type":45,"tag":597,"props":739,"children":740},{"style":610},[741],{"type":51,"value":742}," build_fuzzers",{"type":45,"tag":597,"props":744,"children":745},{"style":610},[746],{"type":51,"value":747}," --sanitizer=address",{"type":45,"tag":597,"props":749,"children":750},{"style":689},[751],{"type":51,"value":692},{"type":45,"tag":597,"props":753,"children":754},{"style":610},[755],{"type":51,"value":697},{"type":45,"tag":597,"props":757,"children":758},{"style":700},[759],{"type":51,"value":703},{"type":45,"tag":597,"props":761,"children":762},{"style":689},[763],{"type":51,"value":708},{"type":45,"tag":54,"props":765,"children":766},{},[767],{"type":45,"tag":121,"props":768,"children":769},{},[770],{"type":51,"value":771},"Sanitizer options:",{"type":45,"tag":226,"props":773,"children":774},{},[775,802],{"type":45,"tag":230,"props":776,"children":777},{},[778,784,786,793,795],{"type":45,"tag":326,"props":779,"children":781},{"className":780},[],[782],{"type":51,"value":783},"--sanitizer=address",{"type":51,"value":785}," for ",{"type":45,"tag":58,"props":787,"children":790},{"href":788,"rel":789},"https:\u002F\u002Fappsec.guide\u002Fdocs\u002Ffuzzing\u002Ftechniques\u002Fasan\u002F",[62],[791],{"type":51,"value":792},"AddressSanitizer",{"type":51,"value":794}," with ",{"type":45,"tag":58,"props":796,"children":799},{"href":797,"rel":798},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fsanitizers\u002Fwiki\u002FAddressSanitizerLeakSanitizer",[62],[800],{"type":51,"value":801},"LeakSanitizer",{"type":45,"tag":230,"props":803,"children":804},{},[805],{"type":51,"value":806},"Other sanitizers available (language support varies)",{"type":45,"tag":54,"props":808,"children":809},{},[810,815,817,823],{"type":45,"tag":121,"props":811,"children":812},{},[813],{"type":51,"value":814},"Note:",{"type":51,"value":816}," Fuzzers are built to ",{"type":45,"tag":326,"props":818,"children":820},{"className":819},[],[821],{"type":51,"value":822},"\u002Fbuild\u002Fout\u002F\u003Cproject-name>\u002F",{"type":51,"value":824}," containing the harness executables, dictionaries, corpus, and crash files.",{"type":45,"tag":80,"props":826,"children":828},{"id":827},"step-4-run-the-fuzzer",[829],{"type":51,"value":830},"Step 4: Run the Fuzzer",{"type":45,"tag":586,"props":832,"children":834},{"className":588,"code":833,"language":590,"meta":591,"style":591},"python3 infra\u002Fhelper.py run_fuzzer \u003Cproject-name> \u003Charness-name> [\u003Cfuzzer-args>]\n",[835],{"type":45,"tag":326,"props":836,"children":837},{"__ignoreMap":591},[838],{"type":45,"tag":597,"props":839,"children":840},{"class":599,"line":600},[841,845,849,854,858,862,866,871,875,880,884,888],{"type":45,"tag":597,"props":842,"children":843},{"style":604},[844],{"type":51,"value":642},{"type":45,"tag":597,"props":846,"children":847},{"style":610},[848],{"type":51,"value":647},{"type":45,"tag":597,"props":850,"children":851},{"style":610},[852],{"type":51,"value":853}," run_fuzzer",{"type":45,"tag":597,"props":855,"children":856},{"style":689},[857],{"type":51,"value":692},{"type":45,"tag":597,"props":859,"children":860},{"style":610},[861],{"type":51,"value":697},{"type":45,"tag":597,"props":863,"children":864},{"style":700},[865],{"type":51,"value":703},{"type":45,"tag":597,"props":867,"children":868},{"style":689},[869],{"type":51,"value":870},">",{"type":45,"tag":597,"props":872,"children":873},{"style":689},[874],{"type":51,"value":692},{"type":45,"tag":597,"props":876,"children":877},{"style":610},[878],{"type":51,"value":879},"harness-nam",{"type":45,"tag":597,"props":881,"children":882},{"style":700},[883],{"type":51,"value":703},{"type":45,"tag":597,"props":885,"children":886},{"style":689},[887],{"type":51,"value":870},{"type":45,"tag":597,"props":889,"children":890},{"style":700},[891],{"type":51,"value":892}," [\u003Cfuzzer-args>]\n",{"type":45,"tag":54,"props":894,"children":895},{},[896],{"type":51,"value":897},"The helper script automatically runs any missed steps if you skip them.",{"type":45,"tag":80,"props":899,"children":901},{"id":900},"step-5-coverage-analysis-optional",[902],{"type":51,"value":903},"Step 5: Coverage Analysis (Optional)",{"type":45,"tag":54,"props":905,"children":906},{},[907,909,916],{"type":51,"value":908},"First, ",{"type":45,"tag":58,"props":910,"children":913},{"href":911,"rel":912},"https:\u002F\u002Fcloud.google.com\u002Fstorage\u002Fdocs\u002Fgsutil_install",[62],[914],{"type":51,"value":915},"install gsutil",{"type":51,"value":917}," (skip gcloud initialization).",{"type":45,"tag":586,"props":919,"children":921},{"className":588,"code":920,"language":590,"meta":591,"style":591},"python3 infra\u002Fhelper.py build_fuzzers --sanitizer=coverage \u003Cproject-name>\npython3 infra\u002Fhelper.py coverage \u003Cproject-name>\n",[922],{"type":45,"tag":326,"props":923,"children":924},{"__ignoreMap":591},[925,961],{"type":45,"tag":597,"props":926,"children":927},{"class":599,"line":600},[928,932,936,940,945,949,953,957],{"type":45,"tag":597,"props":929,"children":930},{"style":604},[931],{"type":51,"value":642},{"type":45,"tag":597,"props":933,"children":934},{"style":610},[935],{"type":51,"value":647},{"type":45,"tag":597,"props":937,"children":938},{"style":610},[939],{"type":51,"value":742},{"type":45,"tag":597,"props":941,"children":942},{"style":610},[943],{"type":51,"value":944}," --sanitizer=coverage",{"type":45,"tag":597,"props":946,"children":947},{"style":689},[948],{"type":51,"value":692},{"type":45,"tag":597,"props":950,"children":951},{"style":610},[952],{"type":51,"value":697},{"type":45,"tag":597,"props":954,"children":955},{"style":700},[956],{"type":51,"value":703},{"type":45,"tag":597,"props":958,"children":959},{"style":689},[960],{"type":51,"value":708},{"type":45,"tag":597,"props":962,"children":963},{"class":599,"line":621},[964,968,972,977,981,985,989],{"type":45,"tag":597,"props":965,"children":966},{"style":604},[967],{"type":51,"value":642},{"type":45,"tag":597,"props":969,"children":970},{"style":610},[971],{"type":51,"value":647},{"type":45,"tag":597,"props":973,"children":974},{"style":610},[975],{"type":51,"value":976}," coverage",{"type":45,"tag":597,"props":978,"children":979},{"style":689},[980],{"type":51,"value":692},{"type":45,"tag":597,"props":982,"children":983},{"style":610},[984],{"type":51,"value":697},{"type":45,"tag":597,"props":986,"children":987},{"style":700},[988],{"type":51,"value":703},{"type":45,"tag":597,"props":990,"children":991},{"style":689},[992],{"type":51,"value":708},{"type":45,"tag":54,"props":994,"children":995},{},[996,998,1004],{"type":51,"value":997},"Use ",{"type":45,"tag":326,"props":999,"children":1001},{"className":1000},[],[1002],{"type":51,"value":1003},"--no-corpus-download",{"type":51,"value":1005}," to use only local corpus. The command generates and hosts a coverage report locally.",{"type":45,"tag":54,"props":1007,"children":1008},{},[1009,1011,1018],{"type":51,"value":1010},"See ",{"type":45,"tag":58,"props":1012,"children":1015},{"href":1013,"rel":1014},"https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fadvanced-topics\u002Fcode-coverage\u002F",[62],[1016],{"type":51,"value":1017},"official OSS-Fuzz documentation",{"type":51,"value":1019}," for details.",{"type":45,"tag":68,"props":1021,"children":1023},{"id":1022},"common-patterns",[1024],{"type":51,"value":1025},"Common Patterns",{"type":45,"tag":80,"props":1027,"children":1029},{"id":1028},"pattern-running-irssi-example",[1030],{"type":51,"value":1031},"Pattern: Running irssi Example",{"type":45,"tag":54,"props":1033,"children":1034},{},[1035,1040],{"type":45,"tag":121,"props":1036,"children":1037},{},[1038],{"type":51,"value":1039},"Use Case:",{"type":51,"value":1041}," Testing OSS-Fuzz setup with a simple enrolled project",{"type":45,"tag":586,"props":1043,"children":1045},{"className":588,"code":1044,"language":590,"meta":591,"style":591},"# Clone and navigate to OSS-Fuzz\ngit clone https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\ncd oss-fuzz\n\n# Build and run irssi fuzzer\npython3 infra\u002Fhelper.py build_image --pull irssi\npython3 infra\u002Fhelper.py build_fuzzers --sanitizer=address irssi\npython3 infra\u002Fhelper.py run_fuzzer irssi irssi-fuzz\n",[1046],{"type":45,"tag":326,"props":1047,"children":1048},{"__ignoreMap":591},[1049,1058,1073,1084,1094,1103,1128,1152],{"type":45,"tag":597,"props":1050,"children":1051},{"class":599,"line":600},[1052],{"type":45,"tag":597,"props":1053,"children":1055},{"style":1054},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1056],{"type":51,"value":1057},"# Clone and navigate to OSS-Fuzz\n",{"type":45,"tag":597,"props":1059,"children":1060},{"class":599,"line":621},[1061,1065,1069],{"type":45,"tag":597,"props":1062,"children":1063},{"style":604},[1064],{"type":51,"value":607},{"type":45,"tag":597,"props":1066,"children":1067},{"style":610},[1068],{"type":51,"value":613},{"type":45,"tag":597,"props":1070,"children":1071},{"style":610},[1072],{"type":51,"value":618},{"type":45,"tag":597,"props":1074,"children":1075},{"class":599,"line":636},[1076,1080],{"type":45,"tag":597,"props":1077,"children":1078},{"style":625},[1079],{"type":51,"value":628},{"type":45,"tag":597,"props":1081,"children":1082},{"style":610},[1083],{"type":51,"value":633},{"type":45,"tag":597,"props":1085,"children":1087},{"class":599,"line":1086},4,[1088],{"type":45,"tag":597,"props":1089,"children":1091},{"emptyLinePlaceholder":1090},true,[1092],{"type":51,"value":1093},"\n",{"type":45,"tag":597,"props":1095,"children":1097},{"class":599,"line":1096},5,[1098],{"type":45,"tag":597,"props":1099,"children":1100},{"style":1054},[1101],{"type":51,"value":1102},"# Build and run irssi fuzzer\n",{"type":45,"tag":597,"props":1104,"children":1106},{"class":599,"line":1105},6,[1107,1111,1115,1119,1123],{"type":45,"tag":597,"props":1108,"children":1109},{"style":604},[1110],{"type":51,"value":642},{"type":45,"tag":597,"props":1112,"children":1113},{"style":610},[1114],{"type":51,"value":647},{"type":45,"tag":597,"props":1116,"children":1117},{"style":610},[1118],{"type":51,"value":681},{"type":45,"tag":597,"props":1120,"children":1121},{"style":610},[1122],{"type":51,"value":686},{"type":45,"tag":597,"props":1124,"children":1125},{"style":610},[1126],{"type":51,"value":1127}," irssi\n",{"type":45,"tag":597,"props":1129,"children":1131},{"class":599,"line":1130},7,[1132,1136,1140,1144,1148],{"type":45,"tag":597,"props":1133,"children":1134},{"style":604},[1135],{"type":51,"value":642},{"type":45,"tag":597,"props":1137,"children":1138},{"style":610},[1139],{"type":51,"value":647},{"type":45,"tag":597,"props":1141,"children":1142},{"style":610},[1143],{"type":51,"value":742},{"type":45,"tag":597,"props":1145,"children":1146},{"style":610},[1147],{"type":51,"value":747},{"type":45,"tag":597,"props":1149,"children":1150},{"style":610},[1151],{"type":51,"value":1127},{"type":45,"tag":597,"props":1153,"children":1155},{"class":599,"line":1154},8,[1156,1160,1164,1168,1173],{"type":45,"tag":597,"props":1157,"children":1158},{"style":604},[1159],{"type":51,"value":642},{"type":45,"tag":597,"props":1161,"children":1162},{"style":610},[1163],{"type":51,"value":647},{"type":45,"tag":597,"props":1165,"children":1166},{"style":610},[1167],{"type":51,"value":853},{"type":45,"tag":597,"props":1169,"children":1170},{"style":610},[1171],{"type":51,"value":1172}," irssi",{"type":45,"tag":597,"props":1174,"children":1175},{"style":610},[1176],{"type":51,"value":1177}," irssi-fuzz\n",{"type":45,"tag":54,"props":1179,"children":1180},{},[1181],{"type":45,"tag":121,"props":1182,"children":1183},{},[1184],{"type":51,"value":1185},"Expected Output:",{"type":45,"tag":586,"props":1187,"children":1191},{"className":1188,"code":1190,"language":51},[1189],"language-text","INFO:__main__:Running: docker run --rm --privileged --shm-size=2g --platform linux\u002Famd64 -i -e FUZZING_ENGINE=libfuzzer -e SANITIZER=address -e RUN_FUZZER_MODE=interactive -e HELPER=True -v \u002Fprivate\u002Ftmp\u002Foss-fuzz\u002Fbuild\u002Fout\u002Firssi:\u002Fout -t gcr.io\u002Foss-fuzz-base\u002Fbase-runner run_fuzzer irssi-fuzz.\nUsing seed corpus: irssi-fuzz_seed_corpus.zip\n\u002Fout\u002Firssi-fuzz -rss_limit_mb=2560 -timeout=25 \u002Ftmp\u002Firssi-fuzz_corpus -max_len=2048 \u003C \u002Fdev\u002Fnull\nINFO: Running with entropic power schedule (0xFF, 100).\nINFO: Seed: 1531341664\nINFO: Loaded 1 modules   (95687 inline 8-bit counters): 95687 [0x1096c80, 0x10ae247),\nINFO: Loaded 1 PC tables (95687 PCs): 95687 [0x10ae248,0x1223eb8),\nINFO:      719 files found in \u002Ftmp\u002Firssi-fuzz_corpus\nINFO: seed corpus: files: 719 min: 1b max: 170106b total: 367969b rss: 48Mb\n#720        INITED cov: 409 ft: 1738 corp: 640\u002F163Kb exec\u002Fs: 0 rss: 62Mb\n#762        REDUCE cov: 409 ft: 1738 corp: 640\u002F163Kb lim: 2048 exec\u002Fs: 0 rss: 63Mb L: 236\u002F2048 MS: 2 ShuffleBytes-EraseBytes-\n",[1192],{"type":45,"tag":326,"props":1193,"children":1194},{"__ignoreMap":591},[1195],{"type":51,"value":1190},{"type":45,"tag":80,"props":1197,"children":1199},{"id":1198},"pattern-enrolling-a-new-project",[1200],{"type":51,"value":1201},"Pattern: Enrolling a New Project",{"type":45,"tag":54,"props":1203,"children":1204},{},[1205,1209],{"type":45,"tag":121,"props":1206,"children":1207},{},[1208],{"type":51,"value":1039},{"type":51,"value":1210}," Adding your project to OSS-Fuzz (or private instance)",{"type":45,"tag":54,"props":1212,"children":1213},{},[1214,1216,1222],{"type":51,"value":1215},"Create three files in ",{"type":45,"tag":326,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":51,"value":1221},"projects\u002F\u003Cyour-project>\u002F",{"type":51,"value":1223},":",{"type":45,"tag":54,"props":1225,"children":1226},{},[1227,1232],{"type":45,"tag":121,"props":1228,"children":1229},{},[1230],{"type":51,"value":1231},"1. project.yaml",{"type":51,"value":1233}," - Project metadata:",{"type":45,"tag":586,"props":1235,"children":1239},{"className":1236,"code":1237,"language":1238,"meta":591,"style":591},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","homepage: \"https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\"\nlanguage: c++\nprimary_contact: \"your-email@example.com\"\nmain_repo: \"https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\"\nfuzzing_engines:\n  - libfuzzer\nsanitizers:\n  - address\n  - undefined\n","yaml",[1240],{"type":45,"tag":326,"props":1241,"children":1242},{"__ignoreMap":591},[1243,1271,1288,1313,1337,1350,1363,1375,1387],{"type":45,"tag":597,"props":1244,"children":1245},{"class":599,"line":600},[1246,1252,1256,1261,1266],{"type":45,"tag":597,"props":1247,"children":1249},{"style":1248},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1250],{"type":51,"value":1251},"homepage",{"type":45,"tag":597,"props":1253,"children":1254},{"style":689},[1255],{"type":51,"value":1223},{"type":45,"tag":597,"props":1257,"children":1258},{"style":689},[1259],{"type":51,"value":1260}," \"",{"type":45,"tag":597,"props":1262,"children":1263},{"style":610},[1264],{"type":51,"value":1265},"https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject",{"type":45,"tag":597,"props":1267,"children":1268},{"style":689},[1269],{"type":51,"value":1270},"\"\n",{"type":45,"tag":597,"props":1272,"children":1273},{"class":599,"line":621},[1274,1279,1283],{"type":45,"tag":597,"props":1275,"children":1276},{"style":1248},[1277],{"type":51,"value":1278},"language",{"type":45,"tag":597,"props":1280,"children":1281},{"style":689},[1282],{"type":51,"value":1223},{"type":45,"tag":597,"props":1284,"children":1285},{"style":610},[1286],{"type":51,"value":1287}," c++\n",{"type":45,"tag":597,"props":1289,"children":1290},{"class":599,"line":636},[1291,1296,1300,1304,1309],{"type":45,"tag":597,"props":1292,"children":1293},{"style":1248},[1294],{"type":51,"value":1295},"primary_contact",{"type":45,"tag":597,"props":1297,"children":1298},{"style":689},[1299],{"type":51,"value":1223},{"type":45,"tag":597,"props":1301,"children":1302},{"style":689},[1303],{"type":51,"value":1260},{"type":45,"tag":597,"props":1305,"children":1306},{"style":610},[1307],{"type":51,"value":1308},"your-email@example.com",{"type":45,"tag":597,"props":1310,"children":1311},{"style":689},[1312],{"type":51,"value":1270},{"type":45,"tag":597,"props":1314,"children":1315},{"class":599,"line":1086},[1316,1321,1325,1329,1333],{"type":45,"tag":597,"props":1317,"children":1318},{"style":1248},[1319],{"type":51,"value":1320},"main_repo",{"type":45,"tag":597,"props":1322,"children":1323},{"style":689},[1324],{"type":51,"value":1223},{"type":45,"tag":597,"props":1326,"children":1327},{"style":689},[1328],{"type":51,"value":1260},{"type":45,"tag":597,"props":1330,"children":1331},{"style":610},[1332],{"type":51,"value":1265},{"type":45,"tag":597,"props":1334,"children":1335},{"style":689},[1336],{"type":51,"value":1270},{"type":45,"tag":597,"props":1338,"children":1339},{"class":599,"line":1096},[1340,1345],{"type":45,"tag":597,"props":1341,"children":1342},{"style":1248},[1343],{"type":51,"value":1344},"fuzzing_engines",{"type":45,"tag":597,"props":1346,"children":1347},{"style":689},[1348],{"type":51,"value":1349},":\n",{"type":45,"tag":597,"props":1351,"children":1352},{"class":599,"line":1105},[1353,1358],{"type":45,"tag":597,"props":1354,"children":1355},{"style":689},[1356],{"type":51,"value":1357},"  -",{"type":45,"tag":597,"props":1359,"children":1360},{"style":610},[1361],{"type":51,"value":1362}," libfuzzer\n",{"type":45,"tag":597,"props":1364,"children":1365},{"class":599,"line":1130},[1366,1371],{"type":45,"tag":597,"props":1367,"children":1368},{"style":1248},[1369],{"type":51,"value":1370},"sanitizers",{"type":45,"tag":597,"props":1372,"children":1373},{"style":689},[1374],{"type":51,"value":1349},{"type":45,"tag":597,"props":1376,"children":1377},{"class":599,"line":1154},[1378,1382],{"type":45,"tag":597,"props":1379,"children":1380},{"style":689},[1381],{"type":51,"value":1357},{"type":45,"tag":597,"props":1383,"children":1384},{"style":610},[1385],{"type":51,"value":1386}," address\n",{"type":45,"tag":597,"props":1388,"children":1390},{"class":599,"line":1389},9,[1391,1395],{"type":45,"tag":597,"props":1392,"children":1393},{"style":689},[1394],{"type":51,"value":1357},{"type":45,"tag":597,"props":1396,"children":1397},{"style":610},[1398],{"type":51,"value":1399}," undefined\n",{"type":45,"tag":54,"props":1401,"children":1402},{},[1403,1408],{"type":45,"tag":121,"props":1404,"children":1405},{},[1406],{"type":51,"value":1407},"2. Dockerfile",{"type":51,"value":1409}," - Build dependencies:",{"type":45,"tag":586,"props":1411,"children":1415},{"className":1412,"code":1413,"language":1414,"meta":591,"style":591},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","FROM gcr.io\u002Foss-fuzz-base\u002Fbase-builder\nRUN apt-get update && apt-get install -y \\\n    autoconf \\\n    automake \\\n    libtool \\\n    pkg-config\nRUN git clone --depth 1 https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\nWORKDIR yourproject\nCOPY build.sh $SRC\u002F\n","dockerfile",[1416],{"type":45,"tag":326,"props":1417,"children":1418},{"__ignoreMap":591},[1419,1427,1435,1443,1451,1459,1467,1475,1483],{"type":45,"tag":597,"props":1420,"children":1421},{"class":599,"line":600},[1422],{"type":45,"tag":597,"props":1423,"children":1424},{},[1425],{"type":51,"value":1426},"FROM gcr.io\u002Foss-fuzz-base\u002Fbase-builder\n",{"type":45,"tag":597,"props":1428,"children":1429},{"class":599,"line":621},[1430],{"type":45,"tag":597,"props":1431,"children":1432},{},[1433],{"type":51,"value":1434},"RUN apt-get update && apt-get install -y \\\n",{"type":45,"tag":597,"props":1436,"children":1437},{"class":599,"line":636},[1438],{"type":45,"tag":597,"props":1439,"children":1440},{},[1441],{"type":51,"value":1442},"    autoconf \\\n",{"type":45,"tag":597,"props":1444,"children":1445},{"class":599,"line":1086},[1446],{"type":45,"tag":597,"props":1447,"children":1448},{},[1449],{"type":51,"value":1450},"    automake \\\n",{"type":45,"tag":597,"props":1452,"children":1453},{"class":599,"line":1096},[1454],{"type":45,"tag":597,"props":1455,"children":1456},{},[1457],{"type":51,"value":1458},"    libtool \\\n",{"type":45,"tag":597,"props":1460,"children":1461},{"class":599,"line":1105},[1462],{"type":45,"tag":597,"props":1463,"children":1464},{},[1465],{"type":51,"value":1466},"    pkg-config\n",{"type":45,"tag":597,"props":1468,"children":1469},{"class":599,"line":1130},[1470],{"type":45,"tag":597,"props":1471,"children":1472},{},[1473],{"type":51,"value":1474},"RUN git clone --depth 1 https:\u002F\u002Fgithub.com\u002Fyourorg\u002Fyourproject\n",{"type":45,"tag":597,"props":1476,"children":1477},{"class":599,"line":1154},[1478],{"type":45,"tag":597,"props":1479,"children":1480},{},[1481],{"type":51,"value":1482},"WORKDIR yourproject\n",{"type":45,"tag":597,"props":1484,"children":1485},{"class":599,"line":1389},[1486],{"type":45,"tag":597,"props":1487,"children":1488},{},[1489],{"type":51,"value":1490},"COPY build.sh $SRC\u002F\n",{"type":45,"tag":54,"props":1492,"children":1493},{},[1494,1499],{"type":45,"tag":121,"props":1495,"children":1496},{},[1497],{"type":51,"value":1498},"3. build.sh",{"type":51,"value":1500}," - Build harnesses:",{"type":45,"tag":586,"props":1502,"children":1504},{"className":588,"code":1503,"language":590,"meta":591,"style":591},"#!\u002Fbin\u002Fbash -eu\n.\u002Fautogen.sh\n.\u002Fconfigure --disable-shared\nmake -j$(nproc)\n\n# Build harnesses\n$CXX $CXXFLAGS -std=c++11 -I. \\\n    $SRC\u002Fyourproject\u002Ffuzz\u002Fharness.cc -o $OUT\u002Fharness \\\n    $LIB_FUZZING_ENGINE .\u002Flibyourproject.a\n\n# Copy corpus and dictionary if available\ncp $SRC\u002Fyourproject\u002Ffuzz\u002Fcorpus.zip $OUT\u002Fharness_seed_corpus.zip\ncp $SRC\u002Fyourproject\u002Ffuzz\u002Fdictionary.dict $OUT\u002Fharness.dict\n",[1505],{"type":45,"tag":326,"props":1506,"children":1507},{"__ignoreMap":591},[1508,1516,1524,1537,1565,1572,1580,1608,1640,1653,1661,1670,1698],{"type":45,"tag":597,"props":1509,"children":1510},{"class":599,"line":600},[1511],{"type":45,"tag":597,"props":1512,"children":1513},{"style":1054},[1514],{"type":51,"value":1515},"#!\u002Fbin\u002Fbash -eu\n",{"type":45,"tag":597,"props":1517,"children":1518},{"class":599,"line":621},[1519],{"type":45,"tag":597,"props":1520,"children":1521},{"style":604},[1522],{"type":51,"value":1523},".\u002Fautogen.sh\n",{"type":45,"tag":597,"props":1525,"children":1526},{"class":599,"line":636},[1527,1532],{"type":45,"tag":597,"props":1528,"children":1529},{"style":604},[1530],{"type":51,"value":1531},".\u002Fconfigure",{"type":45,"tag":597,"props":1533,"children":1534},{"style":610},[1535],{"type":51,"value":1536}," --disable-shared\n",{"type":45,"tag":597,"props":1538,"children":1539},{"class":599,"line":1086},[1540,1545,1550,1555,1560],{"type":45,"tag":597,"props":1541,"children":1542},{"style":604},[1543],{"type":51,"value":1544},"make",{"type":45,"tag":597,"props":1546,"children":1547},{"style":610},[1548],{"type":51,"value":1549}," -j",{"type":45,"tag":597,"props":1551,"children":1552},{"style":689},[1553],{"type":51,"value":1554},"$(",{"type":45,"tag":597,"props":1556,"children":1557},{"style":604},[1558],{"type":51,"value":1559},"nproc",{"type":45,"tag":597,"props":1561,"children":1562},{"style":689},[1563],{"type":51,"value":1564},")\n",{"type":45,"tag":597,"props":1566,"children":1567},{"class":599,"line":1096},[1568],{"type":45,"tag":597,"props":1569,"children":1570},{"emptyLinePlaceholder":1090},[1571],{"type":51,"value":1093},{"type":45,"tag":597,"props":1573,"children":1574},{"class":599,"line":1105},[1575],{"type":45,"tag":597,"props":1576,"children":1577},{"style":1054},[1578],{"type":51,"value":1579},"# Build harnesses\n",{"type":45,"tag":597,"props":1581,"children":1582},{"class":599,"line":1130},[1583,1588,1593,1598,1603],{"type":45,"tag":597,"props":1584,"children":1585},{"style":700},[1586],{"type":51,"value":1587},"$CXX $CXXFLAGS -std",{"type":45,"tag":597,"props":1589,"children":1590},{"style":689},[1591],{"type":51,"value":1592},"=",{"type":45,"tag":597,"props":1594,"children":1595},{"style":610},[1596],{"type":51,"value":1597},"c++11",{"type":45,"tag":597,"props":1599,"children":1600},{"style":604},[1601],{"type":51,"value":1602}," -I.",{"type":45,"tag":597,"props":1604,"children":1605},{"style":700},[1606],{"type":51,"value":1607}," \\\n",{"type":45,"tag":597,"props":1609,"children":1610},{"class":599,"line":1154},[1611,1616,1621,1626,1631,1636],{"type":45,"tag":597,"props":1612,"children":1613},{"style":700},[1614],{"type":51,"value":1615},"    $SRC",{"type":45,"tag":597,"props":1617,"children":1618},{"style":610},[1619],{"type":51,"value":1620},"\u002Fyourproject\u002Ffuzz\u002Fharness.cc",{"type":45,"tag":597,"props":1622,"children":1623},{"style":610},[1624],{"type":51,"value":1625}," -o",{"type":45,"tag":597,"props":1627,"children":1628},{"style":700},[1629],{"type":51,"value":1630}," $OUT",{"type":45,"tag":597,"props":1632,"children":1633},{"style":610},[1634],{"type":51,"value":1635},"\u002Fharness",{"type":45,"tag":597,"props":1637,"children":1638},{"style":700},[1639],{"type":51,"value":1607},{"type":45,"tag":597,"props":1641,"children":1642},{"class":599,"line":1389},[1643,1648],{"type":45,"tag":597,"props":1644,"children":1645},{"style":700},[1646],{"type":51,"value":1647},"    $LIB_FUZZING_ENGINE ",{"type":45,"tag":597,"props":1649,"children":1650},{"style":610},[1651],{"type":51,"value":1652},".\u002Flibyourproject.a\n",{"type":45,"tag":597,"props":1654,"children":1656},{"class":599,"line":1655},10,[1657],{"type":45,"tag":597,"props":1658,"children":1659},{"emptyLinePlaceholder":1090},[1660],{"type":51,"value":1093},{"type":45,"tag":597,"props":1662,"children":1664},{"class":599,"line":1663},11,[1665],{"type":45,"tag":597,"props":1666,"children":1667},{"style":1054},[1668],{"type":51,"value":1669},"# Copy corpus and dictionary if available\n",{"type":45,"tag":597,"props":1671,"children":1673},{"class":599,"line":1672},12,[1674,1679,1684,1689,1693],{"type":45,"tag":597,"props":1675,"children":1676},{"style":604},[1677],{"type":51,"value":1678},"cp",{"type":45,"tag":597,"props":1680,"children":1681},{"style":700},[1682],{"type":51,"value":1683}," $SRC",{"type":45,"tag":597,"props":1685,"children":1686},{"style":610},[1687],{"type":51,"value":1688},"\u002Fyourproject\u002Ffuzz\u002Fcorpus.zip",{"type":45,"tag":597,"props":1690,"children":1691},{"style":700},[1692],{"type":51,"value":1630},{"type":45,"tag":597,"props":1694,"children":1695},{"style":610},[1696],{"type":51,"value":1697},"\u002Fharness_seed_corpus.zip\n",{"type":45,"tag":597,"props":1699,"children":1701},{"class":599,"line":1700},13,[1702,1706,1710,1715,1719],{"type":45,"tag":597,"props":1703,"children":1704},{"style":604},[1705],{"type":51,"value":1678},{"type":45,"tag":597,"props":1707,"children":1708},{"style":700},[1709],{"type":51,"value":1683},{"type":45,"tag":597,"props":1711,"children":1712},{"style":610},[1713],{"type":51,"value":1714},"\u002Fyourproject\u002Ffuzz\u002Fdictionary.dict",{"type":45,"tag":597,"props":1716,"children":1717},{"style":700},[1718],{"type":51,"value":1630},{"type":45,"tag":597,"props":1720,"children":1721},{"style":610},[1722],{"type":51,"value":1723},"\u002Fharness.dict\n",{"type":45,"tag":68,"props":1725,"children":1727},{"id":1726},"docker-images-in-oss-fuzz",[1728],{"type":51,"value":1729},"Docker Images in OSS-Fuzz",{"type":45,"tag":54,"props":1731,"children":1732},{},[1733],{"type":51,"value":1734},"Harnesses are built and executed in Docker containers. All projects share a runner image, but each project has its own build image.",{"type":45,"tag":80,"props":1736,"children":1738},{"id":1737},"image-hierarchy",[1739],{"type":51,"value":1740},"Image Hierarchy",{"type":45,"tag":54,"props":1742,"children":1743},{},[1744],{"type":51,"value":1745},"Images build on each other in this sequence:",{"type":45,"tag":1747,"props":1748,"children":1749},"ol",{},[1750,1765,1785,1839],{"type":45,"tag":230,"props":1751,"children":1752},{},[1753,1763],{"type":45,"tag":121,"props":1754,"children":1755},{},[1756],{"type":45,"tag":58,"props":1757,"children":1760},{"href":1758,"rel":1759},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fblob\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-image\u002FDockerfile",[62],[1761],{"type":51,"value":1762},"base_image",{"type":51,"value":1764}," - Specific Ubuntu version",{"type":45,"tag":230,"props":1766,"children":1767},{},[1768,1778,1780],{"type":45,"tag":121,"props":1769,"children":1770},{},[1771],{"type":45,"tag":58,"props":1772,"children":1775},{"href":1773,"rel":1774},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-clang",[62],[1776],{"type":51,"value":1777},"base_clang",{"type":51,"value":1779}," - Clang compiler; based on ",{"type":45,"tag":326,"props":1781,"children":1783},{"className":1782},[],[1784],{"type":51,"value":1762},{"type":45,"tag":230,"props":1786,"children":1787},{},[1788,1798,1800,1805],{"type":45,"tag":121,"props":1789,"children":1790},{},[1791],{"type":45,"tag":58,"props":1792,"children":1795},{"href":1793,"rel":1794},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-builder",[62],[1796],{"type":51,"value":1797},"base_builder",{"type":51,"value":1799}," - Build dependencies; based on ",{"type":45,"tag":326,"props":1801,"children":1803},{"className":1802},[],[1804],{"type":51,"value":1777},{"type":45,"tag":226,"props":1806,"children":1807},{},[1808,1826],{"type":45,"tag":230,"props":1809,"children":1810},{},[1811,1813,1824],{"type":51,"value":1812},"Language-specific variants: ",{"type":45,"tag":58,"props":1814,"children":1817},{"href":1815,"rel":1816},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-builder-go",[62],[1818],{"type":45,"tag":326,"props":1819,"children":1821},{"className":1820},[],[1822],{"type":51,"value":1823},"base_builder_go",{"type":51,"value":1825},", etc.",{"type":45,"tag":230,"props":1827,"children":1828},{},[1829,1830,1837],{"type":51,"value":1010},{"type":45,"tag":58,"props":1831,"children":1834},{"href":1832,"rel":1833},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images",[62],[1835],{"type":51,"value":1836},"\u002Foss-fuzz\u002Finfra\u002Fbase-images\u002F",{"type":51,"value":1838}," for full list",{"type":45,"tag":230,"props":1840,"children":1841},{},[1842,1847,1849,1854],{"type":45,"tag":121,"props":1843,"children":1844},{},[1845],{"type":51,"value":1846},"Your project Docker image",{"type":51,"value":1848}," - Project-specific dependencies; based on ",{"type":45,"tag":326,"props":1850,"children":1852},{"className":1851},[],[1853],{"type":51,"value":1797},{"type":51,"value":1855}," or language variant",{"type":45,"tag":80,"props":1857,"children":1859},{"id":1858},"runner-images-used-separately",[1860],{"type":51,"value":1861},"Runner Images (Used Separately)",{"type":45,"tag":226,"props":1863,"children":1864},{},[1865,1885],{"type":45,"tag":230,"props":1866,"children":1867},{},[1868,1878,1880],{"type":45,"tag":121,"props":1869,"children":1870},{},[1871],{"type":45,"tag":58,"props":1872,"children":1875},{"href":1873,"rel":1874},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-runner",[62],[1876],{"type":51,"value":1877},"base_runner",{"type":51,"value":1879}," - Executes harnesses; based on ",{"type":45,"tag":326,"props":1881,"children":1883},{"className":1882},[],[1884],{"type":51,"value":1777},{"type":45,"tag":230,"props":1886,"children":1887},{},[1888,1898,1900],{"type":45,"tag":121,"props":1889,"children":1890},{},[1891],{"type":45,"tag":58,"props":1892,"children":1895},{"href":1893,"rel":1894},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Finfra\u002Fbase-images\u002Fbase-runner-debug",[62],[1896],{"type":51,"value":1897},"base_runner_debug",{"type":51,"value":1899}," - With debug tools; based on ",{"type":45,"tag":326,"props":1901,"children":1903},{"className":1902},[],[1904],{"type":51,"value":1877},{"type":45,"tag":68,"props":1906,"children":1908},{"id":1907},"advanced-usage",[1909],{"type":51,"value":1910},"Advanced Usage",{"type":45,"tag":80,"props":1912,"children":1914},{"id":1913},"tips-and-tricks",[1915],{"type":51,"value":1916},"Tips and Tricks",{"type":45,"tag":87,"props":1918,"children":1919},{},[1920,1936],{"type":45,"tag":91,"props":1921,"children":1922},{},[1923],{"type":45,"tag":95,"props":1924,"children":1925},{},[1926,1931],{"type":45,"tag":99,"props":1927,"children":1928},{},[1929],{"type":51,"value":1930},"Tip",{"type":45,"tag":99,"props":1932,"children":1933},{},[1934],{"type":51,"value":1935},"Why It Helps",{"type":45,"tag":110,"props":1937,"children":1938},{},[1939,1955,1980,2005,2021],{"type":45,"tag":95,"props":1940,"children":1941},{},[1942,1950],{"type":45,"tag":117,"props":1943,"children":1944},{},[1945],{"type":45,"tag":121,"props":1946,"children":1947},{},[1948],{"type":51,"value":1949},"Don't manually copy source code",{"type":45,"tag":117,"props":1951,"children":1952},{},[1953],{"type":51,"value":1954},"Project Dockerfile likely already pulls latest version",{"type":45,"tag":95,"props":1956,"children":1957},{},[1958,1966],{"type":45,"tag":117,"props":1959,"children":1960},{},[1961],{"type":45,"tag":121,"props":1962,"children":1963},{},[1964],{"type":51,"value":1965},"Check existing projects",{"type":45,"tag":117,"props":1967,"children":1968},{},[1969,1971,1978],{"type":51,"value":1970},"Browse ",{"type":45,"tag":58,"props":1972,"children":1975},{"href":1973,"rel":1974},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Ftree\u002Fmaster\u002Fprojects",[62],[1976],{"type":51,"value":1977},"oss-fuzz\u002Fprojects",{"type":51,"value":1979}," for examples",{"type":45,"tag":95,"props":1981,"children":1982},{},[1983,1991],{"type":45,"tag":117,"props":1984,"children":1985},{},[1986],{"type":45,"tag":121,"props":1987,"children":1988},{},[1989],{"type":51,"value":1990},"Keep harnesses in separate repo",{"type":45,"tag":117,"props":1992,"children":1993},{},[1994,1996,2003],{"type":51,"value":1995},"Like ",{"type":45,"tag":58,"props":1997,"children":2000},{"href":1998,"rel":1999},"https:\u002F\u002Fgithub.com\u002Fcurl\u002Fcurl-fuzzer",[62],[2001],{"type":51,"value":2002},"curl-fuzzer",{"type":51,"value":2004}," - cleaner organization",{"type":45,"tag":95,"props":2006,"children":2007},{},[2008,2016],{"type":45,"tag":117,"props":2009,"children":2010},{},[2011],{"type":45,"tag":121,"props":2012,"children":2013},{},[2014],{"type":51,"value":2015},"Use specific compiler versions",{"type":45,"tag":117,"props":2017,"children":2018},{},[2019],{"type":51,"value":2020},"Base images provide consistent build environment",{"type":45,"tag":95,"props":2022,"children":2023},{},[2024,2032],{"type":45,"tag":117,"props":2025,"children":2026},{},[2027],{"type":45,"tag":121,"props":2028,"children":2029},{},[2030],{"type":51,"value":2031},"Install dependencies in Dockerfile",{"type":45,"tag":117,"props":2033,"children":2034},{},[2035],{"type":51,"value":2036},"May require approval for OSS-Fuzz enrollment",{"type":45,"tag":80,"props":2038,"children":2040},{"id":2039},"criticality-score",[2041],{"type":51,"value":205},{"type":45,"tag":54,"props":2043,"children":2044},{},[2045,2047,2054,2056,2063],{"type":51,"value":2046},"OSS-Fuzz uses a ",{"type":45,"tag":58,"props":2048,"children":2051},{"href":2049,"rel":2050},"https:\u002F\u002Fgithub.com\u002Fossf\u002Fcriticality_score",[62],[2052],{"type":51,"value":2053},"criticality score",{"type":51,"value":2055}," to evaluate project acceptance. See ",{"type":45,"tag":58,"props":2057,"children":2060},{"href":2058,"rel":2059},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fpull\u002F11444#issuecomment-1875907472",[62],[2061],{"type":51,"value":2062},"this example",{"type":51,"value":2064}," for how scoring works.",{"type":45,"tag":54,"props":2066,"children":2067},{},[2068],{"type":51,"value":2069},"Projects with lower scores may still be added to private OSS-Fuzz instances.",{"type":45,"tag":80,"props":2071,"children":2073},{"id":2072},"hosting-your-own-instance",[2074],{"type":51,"value":2075},"Hosting Your Own Instance",{"type":45,"tag":54,"props":2077,"children":2078},{},[2079],{"type":51,"value":2080},"Since OSS-Fuzz is open-source, you can host your own instance for:",{"type":45,"tag":226,"props":2082,"children":2083},{},[2084,2089,2094],{"type":45,"tag":230,"props":2085,"children":2086},{},[2087],{"type":51,"value":2088},"Private projects not eligible for public OSS-Fuzz",{"type":45,"tag":230,"props":2090,"children":2091},{},[2092],{"type":51,"value":2093},"Projects with lower criticality scores",{"type":45,"tag":230,"props":2095,"children":2096},{},[2097],{"type":51,"value":2098},"Custom fuzzing infrastructure needs",{"type":45,"tag":68,"props":2100,"children":2102},{"id":2101},"anti-patterns",[2103],{"type":51,"value":2104},"Anti-Patterns",{"type":45,"tag":87,"props":2106,"children":2107},{},[2108,2129],{"type":45,"tag":91,"props":2109,"children":2110},{},[2111],{"type":45,"tag":95,"props":2112,"children":2113},{},[2114,2119,2124],{"type":45,"tag":99,"props":2115,"children":2116},{},[2117],{"type":51,"value":2118},"Anti-Pattern",{"type":45,"tag":99,"props":2120,"children":2121},{},[2122],{"type":51,"value":2123},"Problem",{"type":45,"tag":99,"props":2125,"children":2126},{},[2127],{"type":51,"value":2128},"Correct Approach",{"type":45,"tag":110,"props":2130,"children":2131},{},[2132,2153,2174,2195,2216],{"type":45,"tag":95,"props":2133,"children":2134},{},[2135,2143,2148],{"type":45,"tag":117,"props":2136,"children":2137},{},[2138],{"type":45,"tag":121,"props":2139,"children":2140},{},[2141],{"type":51,"value":2142},"Manually pulling source in build.sh",{"type":45,"tag":117,"props":2144,"children":2145},{},[2146],{"type":51,"value":2147},"Doesn't use latest version",{"type":45,"tag":117,"props":2149,"children":2150},{},[2151],{"type":51,"value":2152},"Let Dockerfile handle git clone",{"type":45,"tag":95,"props":2154,"children":2155},{},[2156,2164,2169],{"type":45,"tag":117,"props":2157,"children":2158},{},[2159],{"type":45,"tag":121,"props":2160,"children":2161},{},[2162],{"type":51,"value":2163},"Copying code to OSS-Fuzz repo",{"type":45,"tag":117,"props":2165,"children":2166},{},[2167],{"type":51,"value":2168},"Hard to maintain, violates separation",{"type":45,"tag":117,"props":2170,"children":2171},{},[2172],{"type":51,"value":2173},"Reference external harness repo",{"type":45,"tag":95,"props":2175,"children":2176},{},[2177,2185,2190],{"type":45,"tag":117,"props":2178,"children":2179},{},[2180],{"type":45,"tag":121,"props":2181,"children":2182},{},[2183],{"type":51,"value":2184},"Ignoring base image versions",{"type":45,"tag":117,"props":2186,"children":2187},{},[2188],{"type":51,"value":2189},"Build inconsistencies",{"type":45,"tag":117,"props":2191,"children":2192},{},[2193],{"type":51,"value":2194},"Use provided base images and compilers",{"type":45,"tag":95,"props":2196,"children":2197},{},[2198,2206,2211],{"type":45,"tag":117,"props":2199,"children":2200},{},[2201],{"type":45,"tag":121,"props":2202,"children":2203},{},[2204],{"type":51,"value":2205},"Skipping local testing",{"type":45,"tag":117,"props":2207,"children":2208},{},[2209],{"type":51,"value":2210},"Wastes CI resources",{"type":45,"tag":117,"props":2212,"children":2213},{},[2214],{"type":51,"value":2215},"Use helper.py locally before PR",{"type":45,"tag":95,"props":2217,"children":2218},{},[2219,2227,2232],{"type":45,"tag":117,"props":2220,"children":2221},{},[2222],{"type":45,"tag":121,"props":2223,"children":2224},{},[2225],{"type":51,"value":2226},"Not checking build status",{"type":45,"tag":117,"props":2228,"children":2229},{},[2230],{"type":51,"value":2231},"Unnoticed build failures",{"type":45,"tag":117,"props":2233,"children":2234},{},[2235],{"type":51,"value":2236},"Monitor build status page regularly",{"type":45,"tag":68,"props":2238,"children":2240},{"id":2239},"tool-specific-guidance",[2241],{"type":51,"value":2242},"Tool-Specific Guidance",{"type":45,"tag":80,"props":2244,"children":2246},{"id":2245},"libfuzzer",[2247],{"type":51,"value":2248},"libFuzzer",{"type":45,"tag":54,"props":2250,"children":2251},{},[2252],{"type":51,"value":2253},"OSS-Fuzz primarily uses libFuzzer as the fuzzing engine for C\u002FC++ projects.",{"type":45,"tag":54,"props":2255,"children":2256},{},[2257],{"type":45,"tag":121,"props":2258,"children":2259},{},[2260],{"type":51,"value":2261},"Harness signature:",{"type":45,"tag":586,"props":2263,"children":2267},{"className":2264,"code":2265,"language":2266,"meta":591,"style":591},"language-c++ shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","extern \"C\" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {\n    \u002F\u002F Your fuzzing logic\n    return 0;\n}\n","c++",[2268],{"type":45,"tag":326,"props":2269,"children":2270},{"__ignoreMap":591},[2271,2279,2287,2295],{"type":45,"tag":597,"props":2272,"children":2273},{"class":599,"line":600},[2274],{"type":45,"tag":597,"props":2275,"children":2276},{},[2277],{"type":51,"value":2278},"extern \"C\" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {\n",{"type":45,"tag":597,"props":2280,"children":2281},{"class":599,"line":621},[2282],{"type":45,"tag":597,"props":2283,"children":2284},{},[2285],{"type":51,"value":2286},"    \u002F\u002F Your fuzzing logic\n",{"type":45,"tag":597,"props":2288,"children":2289},{"class":599,"line":636},[2290],{"type":45,"tag":597,"props":2291,"children":2292},{},[2293],{"type":51,"value":2294},"    return 0;\n",{"type":45,"tag":597,"props":2296,"children":2297},{"class":599,"line":1086},[2298],{"type":45,"tag":597,"props":2299,"children":2300},{},[2301],{"type":51,"value":2302},"}\n",{"type":45,"tag":54,"props":2304,"children":2305},{},[2306],{"type":45,"tag":121,"props":2307,"children":2308},{},[2309],{"type":51,"value":2310},"Build in build.sh:",{"type":45,"tag":586,"props":2312,"children":2314},{"className":588,"code":2313,"language":590,"meta":591,"style":591},"$CXX $CXXFLAGS -std=c++11 -I. \\\n    harness.cc -o $OUT\u002Fharness \\\n    $LIB_FUZZING_ENGINE .\u002Flibproject.a\n",[2315],{"type":45,"tag":326,"props":2316,"children":2317},{"__ignoreMap":591},[2318,2341,2365],{"type":45,"tag":597,"props":2319,"children":2320},{"class":599,"line":600},[2321,2325,2329,2333,2337],{"type":45,"tag":597,"props":2322,"children":2323},{"style":700},[2324],{"type":51,"value":1587},{"type":45,"tag":597,"props":2326,"children":2327},{"style":689},[2328],{"type":51,"value":1592},{"type":45,"tag":597,"props":2330,"children":2331},{"style":610},[2332],{"type":51,"value":1597},{"type":45,"tag":597,"props":2334,"children":2335},{"style":604},[2336],{"type":51,"value":1602},{"type":45,"tag":597,"props":2338,"children":2339},{"style":700},[2340],{"type":51,"value":1607},{"type":45,"tag":597,"props":2342,"children":2343},{"class":599,"line":621},[2344,2349,2353,2357,2361],{"type":45,"tag":597,"props":2345,"children":2346},{"style":610},[2347],{"type":51,"value":2348},"    harness.cc",{"type":45,"tag":597,"props":2350,"children":2351},{"style":610},[2352],{"type":51,"value":1625},{"type":45,"tag":597,"props":2354,"children":2355},{"style":700},[2356],{"type":51,"value":1630},{"type":45,"tag":597,"props":2358,"children":2359},{"style":610},[2360],{"type":51,"value":1635},{"type":45,"tag":597,"props":2362,"children":2363},{"style":700},[2364],{"type":51,"value":1607},{"type":45,"tag":597,"props":2366,"children":2367},{"class":599,"line":636},[2368,2372],{"type":45,"tag":597,"props":2369,"children":2370},{"style":700},[2371],{"type":51,"value":1647},{"type":45,"tag":597,"props":2373,"children":2374},{"style":610},[2375],{"type":51,"value":2376},".\u002Flibproject.a\n",{"type":45,"tag":54,"props":2378,"children":2379},{},[2380],{"type":45,"tag":121,"props":2381,"children":2382},{},[2383],{"type":51,"value":2384},"Integration tips:",{"type":45,"tag":226,"props":2386,"children":2387},{},[2388,2400,2413],{"type":45,"tag":230,"props":2389,"children":2390},{},[2391,2392,2398],{"type":51,"value":997},{"type":45,"tag":326,"props":2393,"children":2395},{"className":2394},[],[2396],{"type":51,"value":2397},"$LIB_FUZZING_ENGINE",{"type":51,"value":2399}," variable provided by OSS-Fuzz",{"type":45,"tag":230,"props":2401,"children":2402},{},[2403,2405,2411],{"type":51,"value":2404},"Include ",{"type":45,"tag":326,"props":2406,"children":2408},{"className":2407},[],[2409],{"type":51,"value":2410},"-fsanitize=fuzzer",{"type":51,"value":2412}," is handled automatically",{"type":45,"tag":230,"props":2414,"children":2415},{},[2416],{"type":51,"value":2417},"Link against static libraries when possible",{"type":45,"tag":80,"props":2419,"children":2421},{"id":2420},"afl",[2422],{"type":51,"value":2423},"AFL++",{"type":45,"tag":54,"props":2425,"children":2426},{},[2427],{"type":51,"value":2428},"OSS-Fuzz supports AFL++ as an alternative fuzzing engine.",{"type":45,"tag":54,"props":2430,"children":2431},{},[2432],{"type":45,"tag":121,"props":2433,"children":2434},{},[2435],{"type":51,"value":2436},"Enable in project.yaml:",{"type":45,"tag":586,"props":2438,"children":2440},{"className":1236,"code":2439,"language":1238,"meta":591,"style":591},"fuzzing_engines:\n  - afl\n  - libfuzzer\n",[2441],{"type":45,"tag":326,"props":2442,"children":2443},{"__ignoreMap":591},[2444,2455,2467],{"type":45,"tag":597,"props":2445,"children":2446},{"class":599,"line":600},[2447,2451],{"type":45,"tag":597,"props":2448,"children":2449},{"style":1248},[2450],{"type":51,"value":1344},{"type":45,"tag":597,"props":2452,"children":2453},{"style":689},[2454],{"type":51,"value":1349},{"type":45,"tag":597,"props":2456,"children":2457},{"class":599,"line":621},[2458,2462],{"type":45,"tag":597,"props":2459,"children":2460},{"style":689},[2461],{"type":51,"value":1357},{"type":45,"tag":597,"props":2463,"children":2464},{"style":610},[2465],{"type":51,"value":2466}," afl\n",{"type":45,"tag":597,"props":2468,"children":2469},{"class":599,"line":636},[2470,2474],{"type":45,"tag":597,"props":2471,"children":2472},{"style":689},[2473],{"type":51,"value":1357},{"type":45,"tag":597,"props":2475,"children":2476},{"style":610},[2477],{"type":51,"value":1362},{"type":45,"tag":54,"props":2479,"children":2480},{},[2481],{"type":45,"tag":121,"props":2482,"children":2483},{},[2484],{"type":51,"value":2384},{"type":45,"tag":226,"props":2486,"children":2487},{},[2488,2493,2498],{"type":45,"tag":230,"props":2489,"children":2490},{},[2491],{"type":51,"value":2492},"AFL++ harnesses work alongside libFuzzer harnesses",{"type":45,"tag":230,"props":2494,"children":2495},{},[2496],{"type":51,"value":2497},"Use persistent mode for better performance",{"type":45,"tag":230,"props":2499,"children":2500},{},[2501],{"type":51,"value":2502},"OSS-Fuzz handles engine-specific compilation flags",{"type":45,"tag":80,"props":2504,"children":2506},{"id":2505},"atheris-python",[2507],{"type":51,"value":2508},"Atheris (Python)",{"type":45,"tag":54,"props":2510,"children":2511},{},[2512],{"type":51,"value":2513},"For Python projects with C extensions.",{"type":45,"tag":54,"props":2515,"children":2516},{},[2517],{"type":45,"tag":121,"props":2518,"children":2519},{},[2520,2522,2529],{"type":51,"value":2521},"Example from ",{"type":45,"tag":58,"props":2523,"children":2526},{"href":2524,"rel":2525},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Foss-fuzz\u002Fpull\u002F11444",[62],[2527],{"type":51,"value":2528},"cbor2 integration",{"type":51,"value":1223},{"type":45,"tag":54,"props":2531,"children":2532},{},[2533],{"type":45,"tag":121,"props":2534,"children":2535},{},[2536],{"type":51,"value":2537},"Harness:",{"type":45,"tag":586,"props":2539,"children":2543},{"className":2540,"code":2541,"language":2542,"meta":591,"style":591},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import atheris\nimport sys\nimport cbor2\n\n@atheris.instrument_func\ndef TestOneInput(data):\n    fdp = atheris.FuzzedDataProvider(data)\n    try:\n        cbor2.loads(data)\n    except (cbor2.CBORDecodeError, ValueError):\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, TestOneInput)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n","python",[2544],{"type":45,"tag":326,"props":2545,"children":2546},{"__ignoreMap":591},[2547,2555,2563,2571,2578,2586,2594,2602,2610,2618,2626,2634,2641,2649,2658,2667,2675,2684],{"type":45,"tag":597,"props":2548,"children":2549},{"class":599,"line":600},[2550],{"type":45,"tag":597,"props":2551,"children":2552},{},[2553],{"type":51,"value":2554},"import atheris\n",{"type":45,"tag":597,"props":2556,"children":2557},{"class":599,"line":621},[2558],{"type":45,"tag":597,"props":2559,"children":2560},{},[2561],{"type":51,"value":2562},"import sys\n",{"type":45,"tag":597,"props":2564,"children":2565},{"class":599,"line":636},[2566],{"type":45,"tag":597,"props":2567,"children":2568},{},[2569],{"type":51,"value":2570},"import cbor2\n",{"type":45,"tag":597,"props":2572,"children":2573},{"class":599,"line":1086},[2574],{"type":45,"tag":597,"props":2575,"children":2576},{"emptyLinePlaceholder":1090},[2577],{"type":51,"value":1093},{"type":45,"tag":597,"props":2579,"children":2580},{"class":599,"line":1096},[2581],{"type":45,"tag":597,"props":2582,"children":2583},{},[2584],{"type":51,"value":2585},"@atheris.instrument_func\n",{"type":45,"tag":597,"props":2587,"children":2588},{"class":599,"line":1105},[2589],{"type":45,"tag":597,"props":2590,"children":2591},{},[2592],{"type":51,"value":2593},"def TestOneInput(data):\n",{"type":45,"tag":597,"props":2595,"children":2596},{"class":599,"line":1130},[2597],{"type":45,"tag":597,"props":2598,"children":2599},{},[2600],{"type":51,"value":2601},"    fdp = atheris.FuzzedDataProvider(data)\n",{"type":45,"tag":597,"props":2603,"children":2604},{"class":599,"line":1154},[2605],{"type":45,"tag":597,"props":2606,"children":2607},{},[2608],{"type":51,"value":2609},"    try:\n",{"type":45,"tag":597,"props":2611,"children":2612},{"class":599,"line":1389},[2613],{"type":45,"tag":597,"props":2614,"children":2615},{},[2616],{"type":51,"value":2617},"        cbor2.loads(data)\n",{"type":45,"tag":597,"props":2619,"children":2620},{"class":599,"line":1655},[2621],{"type":45,"tag":597,"props":2622,"children":2623},{},[2624],{"type":51,"value":2625},"    except (cbor2.CBORDecodeError, ValueError):\n",{"type":45,"tag":597,"props":2627,"children":2628},{"class":599,"line":1663},[2629],{"type":45,"tag":597,"props":2630,"children":2631},{},[2632],{"type":51,"value":2633},"        pass\n",{"type":45,"tag":597,"props":2635,"children":2636},{"class":599,"line":1672},[2637],{"type":45,"tag":597,"props":2638,"children":2639},{"emptyLinePlaceholder":1090},[2640],{"type":51,"value":1093},{"type":45,"tag":597,"props":2642,"children":2643},{"class":599,"line":1700},[2644],{"type":45,"tag":597,"props":2645,"children":2646},{},[2647],{"type":51,"value":2648},"def main():\n",{"type":45,"tag":597,"props":2650,"children":2652},{"class":599,"line":2651},14,[2653],{"type":45,"tag":597,"props":2654,"children":2655},{},[2656],{"type":51,"value":2657},"    atheris.Setup(sys.argv, TestOneInput)\n",{"type":45,"tag":597,"props":2659,"children":2661},{"class":599,"line":2660},15,[2662],{"type":45,"tag":597,"props":2663,"children":2664},{},[2665],{"type":51,"value":2666},"    atheris.Fuzz()\n",{"type":45,"tag":597,"props":2668,"children":2670},{"class":599,"line":2669},16,[2671],{"type":45,"tag":597,"props":2672,"children":2673},{"emptyLinePlaceholder":1090},[2674],{"type":51,"value":1093},{"type":45,"tag":597,"props":2676,"children":2678},{"class":599,"line":2677},17,[2679],{"type":45,"tag":597,"props":2680,"children":2681},{},[2682],{"type":51,"value":2683},"if __name__ == \"__main__\":\n",{"type":45,"tag":597,"props":2685,"children":2687},{"class":599,"line":2686},18,[2688],{"type":45,"tag":597,"props":2689,"children":2690},{},[2691],{"type":51,"value":2692},"    main()\n",{"type":45,"tag":54,"props":2694,"children":2695},{},[2696],{"type":45,"tag":121,"props":2697,"children":2698},{},[2699],{"type":51,"value":2310},{"type":45,"tag":586,"props":2701,"children":2703},{"className":588,"code":2702,"language":590,"meta":591,"style":591},"pip3 install .\nfor fuzzer in $(find $SRC -name 'fuzz_*.py'); do\n  compile_python_fuzzer $fuzzer\ndone\n",[2704],{"type":45,"tag":326,"props":2705,"children":2706},{"__ignoreMap":591},[2707,2725,2789,2802],{"type":45,"tag":597,"props":2708,"children":2709},{"class":599,"line":600},[2710,2715,2720],{"type":45,"tag":597,"props":2711,"children":2712},{"style":604},[2713],{"type":51,"value":2714},"pip3",{"type":45,"tag":597,"props":2716,"children":2717},{"style":610},[2718],{"type":51,"value":2719}," install",{"type":45,"tag":597,"props":2721,"children":2722},{"style":610},[2723],{"type":51,"value":2724}," .\n",{"type":45,"tag":597,"props":2726,"children":2727},{"class":599,"line":621},[2728,2734,2739,2744,2749,2754,2759,2764,2769,2774,2779,2784],{"type":45,"tag":597,"props":2729,"children":2731},{"style":2730},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[2732],{"type":51,"value":2733},"for",{"type":45,"tag":597,"props":2735,"children":2736},{"style":700},[2737],{"type":51,"value":2738}," fuzzer ",{"type":45,"tag":597,"props":2740,"children":2741},{"style":2730},[2742],{"type":51,"value":2743},"in",{"type":45,"tag":597,"props":2745,"children":2746},{"style":689},[2747],{"type":51,"value":2748}," $(",{"type":45,"tag":597,"props":2750,"children":2751},{"style":604},[2752],{"type":51,"value":2753},"find",{"type":45,"tag":597,"props":2755,"children":2756},{"style":700},[2757],{"type":51,"value":2758}," $SRC ",{"type":45,"tag":597,"props":2760,"children":2761},{"style":610},[2762],{"type":51,"value":2763},"-name",{"type":45,"tag":597,"props":2765,"children":2766},{"style":689},[2767],{"type":51,"value":2768}," '",{"type":45,"tag":597,"props":2770,"children":2771},{"style":610},[2772],{"type":51,"value":2773},"fuzz_*.py",{"type":45,"tag":597,"props":2775,"children":2776},{"style":689},[2777],{"type":51,"value":2778},"'",{"type":45,"tag":597,"props":2780,"children":2781},{"style":689},[2782],{"type":51,"value":2783},");",{"type":45,"tag":597,"props":2785,"children":2786},{"style":2730},[2787],{"type":51,"value":2788}," do\n",{"type":45,"tag":597,"props":2790,"children":2791},{"class":599,"line":636},[2792,2797],{"type":45,"tag":597,"props":2793,"children":2794},{"style":604},[2795],{"type":51,"value":2796},"  compile_python_fuzzer",{"type":45,"tag":597,"props":2798,"children":2799},{"style":700},[2800],{"type":51,"value":2801}," $fuzzer\n",{"type":45,"tag":597,"props":2803,"children":2804},{"class":599,"line":1086},[2805],{"type":45,"tag":597,"props":2806,"children":2807},{"style":2730},[2808],{"type":51,"value":2809},"done\n",{"type":45,"tag":54,"props":2811,"children":2812},{},[2813],{"type":45,"tag":121,"props":2814,"children":2815},{},[2816],{"type":51,"value":2384},{"type":45,"tag":226,"props":2818,"children":2819},{},[2820,2832],{"type":45,"tag":230,"props":2821,"children":2822},{},[2823,2824,2830],{"type":51,"value":997},{"type":45,"tag":326,"props":2825,"children":2827},{"className":2826},[],[2828],{"type":51,"value":2829},"compile_python_fuzzer",{"type":51,"value":2831}," helper provided by OSS-Fuzz",{"type":45,"tag":230,"props":2833,"children":2834},{},[2835,2836,2843],{"type":51,"value":1010},{"type":45,"tag":58,"props":2837,"children":2840},{"href":2838,"rel":2839},"https:\u002F\u002Fblog.trailofbits.com\u002F2024\u002F02\u002F23\u002Fcontinuously-fuzzing-python-c-extensions\u002F",[62],[2841],{"type":51,"value":2842},"Continuously Fuzzing Python C Extensions",{"type":51,"value":2844}," blog post",{"type":45,"tag":80,"props":2846,"children":2848},{"id":2847},"rust-projects",[2849],{"type":51,"value":2850},"Rust Projects",{"type":45,"tag":54,"props":2852,"children":2853},{},[2854],{"type":45,"tag":121,"props":2855,"children":2856},{},[2857],{"type":51,"value":2436},{"type":45,"tag":586,"props":2859,"children":2861},{"className":1236,"code":2860,"language":1238,"meta":591,"style":591},"language: rust\nfuzzing_engines:\n  - libfuzzer\nsanitizers:\n  - address  # Only AddressSanitizer supported for Rust\n",[2862],{"type":45,"tag":326,"props":2863,"children":2864},{"__ignoreMap":591},[2865,2881,2892,2903,2914],{"type":45,"tag":597,"props":2866,"children":2867},{"class":599,"line":600},[2868,2872,2876],{"type":45,"tag":597,"props":2869,"children":2870},{"style":1248},[2871],{"type":51,"value":1278},{"type":45,"tag":597,"props":2873,"children":2874},{"style":689},[2875],{"type":51,"value":1223},{"type":45,"tag":597,"props":2877,"children":2878},{"style":610},[2879],{"type":51,"value":2880}," rust\n",{"type":45,"tag":597,"props":2882,"children":2883},{"class":599,"line":621},[2884,2888],{"type":45,"tag":597,"props":2885,"children":2886},{"style":1248},[2887],{"type":51,"value":1344},{"type":45,"tag":597,"props":2889,"children":2890},{"style":689},[2891],{"type":51,"value":1349},{"type":45,"tag":597,"props":2893,"children":2894},{"class":599,"line":636},[2895,2899],{"type":45,"tag":597,"props":2896,"children":2897},{"style":689},[2898],{"type":51,"value":1357},{"type":45,"tag":597,"props":2900,"children":2901},{"style":610},[2902],{"type":51,"value":1362},{"type":45,"tag":597,"props":2904,"children":2905},{"class":599,"line":1086},[2906,2910],{"type":45,"tag":597,"props":2907,"children":2908},{"style":1248},[2909],{"type":51,"value":1370},{"type":45,"tag":597,"props":2911,"children":2912},{"style":689},[2913],{"type":51,"value":1349},{"type":45,"tag":597,"props":2915,"children":2916},{"class":599,"line":1096},[2917,2921,2926],{"type":45,"tag":597,"props":2918,"children":2919},{"style":689},[2920],{"type":51,"value":1357},{"type":45,"tag":597,"props":2922,"children":2923},{"style":610},[2924],{"type":51,"value":2925}," address",{"type":45,"tag":597,"props":2927,"children":2928},{"style":1054},[2929],{"type":51,"value":2930},"  # Only AddressSanitizer supported for Rust\n",{"type":45,"tag":54,"props":2932,"children":2933},{},[2934],{"type":45,"tag":121,"props":2935,"children":2936},{},[2937],{"type":51,"value":2310},{"type":45,"tag":586,"props":2939,"children":2941},{"className":588,"code":2940,"language":590,"meta":591,"style":591},"cargo fuzz build -O --debug-assertions\ncp fuzz\u002Ftarget\u002Fx86_64-unknown-linux-gnu\u002Frelease\u002Ffuzz_target_1 $OUT\u002F\n",[2942],{"type":45,"tag":326,"props":2943,"children":2944},{"__ignoreMap":591},[2945,2973],{"type":45,"tag":597,"props":2946,"children":2947},{"class":599,"line":600},[2948,2953,2958,2963,2968],{"type":45,"tag":597,"props":2949,"children":2950},{"style":604},[2951],{"type":51,"value":2952},"cargo",{"type":45,"tag":597,"props":2954,"children":2955},{"style":610},[2956],{"type":51,"value":2957}," fuzz",{"type":45,"tag":597,"props":2959,"children":2960},{"style":610},[2961],{"type":51,"value":2962}," build",{"type":45,"tag":597,"props":2964,"children":2965},{"style":610},[2966],{"type":51,"value":2967}," -O",{"type":45,"tag":597,"props":2969,"children":2970},{"style":610},[2971],{"type":51,"value":2972}," --debug-assertions\n",{"type":45,"tag":597,"props":2974,"children":2975},{"class":599,"line":621},[2976,2980,2985,2989],{"type":45,"tag":597,"props":2977,"children":2978},{"style":604},[2979],{"type":51,"value":1678},{"type":45,"tag":597,"props":2981,"children":2982},{"style":610},[2983],{"type":51,"value":2984}," fuzz\u002Ftarget\u002Fx86_64-unknown-linux-gnu\u002Frelease\u002Ffuzz_target_1",{"type":45,"tag":597,"props":2986,"children":2987},{"style":700},[2988],{"type":51,"value":1630},{"type":45,"tag":597,"props":2990,"children":2991},{"style":610},[2992],{"type":51,"value":2993},"\u002F\n",{"type":45,"tag":54,"props":2995,"children":2996},{},[2997],{"type":45,"tag":121,"props":2998,"children":2999},{},[3000],{"type":51,"value":2384},{"type":45,"tag":226,"props":3002,"children":3003},{},[3004,3014,3019],{"type":45,"tag":230,"props":3005,"children":3006},{},[3007],{"type":45,"tag":58,"props":3008,"children":3011},{"href":3009,"rel":3010},"https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fgetting-started\u002Fnew-project-guide\u002Frust-lang\u002F#projectyaml",[62],[3012],{"type":51,"value":3013},"Rust supports only AddressSanitizer with libfuzzer",{"type":45,"tag":230,"props":3015,"children":3016},{},[3017],{"type":51,"value":3018},"Use cargo-fuzz for local development",{"type":45,"tag":230,"props":3020,"children":3021},{},[3022],{"type":51,"value":3023},"OSS-Fuzz handles Rust-specific compilation",{"type":45,"tag":68,"props":3025,"children":3027},{"id":3026},"troubleshooting",[3028],{"type":51,"value":3029},"Troubleshooting",{"type":45,"tag":87,"props":3031,"children":3032},{},[3033,3054],{"type":45,"tag":91,"props":3034,"children":3035},{},[3036],{"type":45,"tag":95,"props":3037,"children":3038},{},[3039,3044,3049],{"type":45,"tag":99,"props":3040,"children":3041},{},[3042],{"type":51,"value":3043},"Issue",{"type":45,"tag":99,"props":3045,"children":3046},{},[3047],{"type":51,"value":3048},"Cause",{"type":45,"tag":99,"props":3050,"children":3051},{},[3052],{"type":51,"value":3053},"Solution",{"type":45,"tag":110,"props":3055,"children":3056},{},[3057,3086,3107,3128,3149,3170],{"type":45,"tag":95,"props":3058,"children":3059},{},[3060,3068,3073],{"type":45,"tag":117,"props":3061,"children":3062},{},[3063],{"type":45,"tag":121,"props":3064,"children":3065},{},[3066],{"type":51,"value":3067},"Build fails with missing dependencies",{"type":45,"tag":117,"props":3069,"children":3070},{},[3071],{"type":51,"value":3072},"Dependencies not in Dockerfile",{"type":45,"tag":117,"props":3074,"children":3075},{},[3076,3078,3084],{"type":51,"value":3077},"Add ",{"type":45,"tag":326,"props":3079,"children":3081},{"className":3080},[],[3082],{"type":51,"value":3083},"apt-get install",{"type":51,"value":3085}," or equivalent in Dockerfile",{"type":45,"tag":95,"props":3087,"children":3088},{},[3089,3097,3102],{"type":45,"tag":117,"props":3090,"children":3091},{},[3092],{"type":45,"tag":121,"props":3093,"children":3094},{},[3095],{"type":51,"value":3096},"Harness crashes immediately",{"type":45,"tag":117,"props":3098,"children":3099},{},[3100],{"type":51,"value":3101},"Missing input validation",{"type":45,"tag":117,"props":3103,"children":3104},{},[3105],{"type":51,"value":3106},"Add size checks in harness",{"type":45,"tag":95,"props":3108,"children":3109},{},[3110,3118,3123],{"type":45,"tag":117,"props":3111,"children":3112},{},[3113],{"type":45,"tag":121,"props":3114,"children":3115},{},[3116],{"type":51,"value":3117},"Coverage is 0%",{"type":45,"tag":117,"props":3119,"children":3120},{},[3121],{"type":51,"value":3122},"Harness not reaching target code",{"type":45,"tag":117,"props":3124,"children":3125},{},[3126],{"type":51,"value":3127},"Verify harness actually calls target functions",{"type":45,"tag":95,"props":3129,"children":3130},{},[3131,3139,3144],{"type":45,"tag":117,"props":3132,"children":3133},{},[3134],{"type":45,"tag":121,"props":3135,"children":3136},{},[3137],{"type":51,"value":3138},"Build timeout",{"type":45,"tag":117,"props":3140,"children":3141},{},[3142],{"type":51,"value":3143},"Complex build process",{"type":45,"tag":117,"props":3145,"children":3146},{},[3147],{"type":51,"value":3148},"Optimize build.sh, consider parallel builds",{"type":45,"tag":95,"props":3150,"children":3151},{},[3152,3160,3165],{"type":45,"tag":117,"props":3153,"children":3154},{},[3155],{"type":45,"tag":121,"props":3156,"children":3157},{},[3158],{"type":51,"value":3159},"Sanitizer errors in build",{"type":45,"tag":117,"props":3161,"children":3162},{},[3163],{"type":51,"value":3164},"Incompatible flags",{"type":45,"tag":117,"props":3166,"children":3167},{},[3168],{"type":51,"value":3169},"Use flags provided by OSS-Fuzz environment variables",{"type":45,"tag":95,"props":3171,"children":3172},{},[3173,3181,3186],{"type":45,"tag":117,"props":3174,"children":3175},{},[3176],{"type":45,"tag":121,"props":3177,"children":3178},{},[3179],{"type":51,"value":3180},"Cannot find source code",{"type":45,"tag":117,"props":3182,"children":3183},{},[3184],{"type":51,"value":3185},"Wrong working directory in Dockerfile",{"type":45,"tag":117,"props":3187,"children":3188},{},[3189],{"type":51,"value":3190},"Set WORKDIR or use absolute paths",{"type":45,"tag":68,"props":3192,"children":3194},{"id":3193},"related-skills",[3195],{"type":51,"value":3196},"Related Skills",{"type":45,"tag":80,"props":3198,"children":3200},{"id":3199},"tools-that-use-this-technique",[3201],{"type":51,"value":3202},"Tools That Use This Technique",{"type":45,"tag":87,"props":3204,"children":3205},{},[3206,3222],{"type":45,"tag":91,"props":3207,"children":3208},{},[3209],{"type":45,"tag":95,"props":3210,"children":3211},{},[3212,3217],{"type":45,"tag":99,"props":3213,"children":3214},{},[3215],{"type":51,"value":3216},"Skill",{"type":45,"tag":99,"props":3218,"children":3219},{},[3220],{"type":51,"value":3221},"How It Applies",{"type":45,"tag":110,"props":3223,"children":3224},{},[3225,3240,3256,3272],{"type":45,"tag":95,"props":3226,"children":3227},{},[3228,3235],{"type":45,"tag":117,"props":3229,"children":3230},{},[3231],{"type":45,"tag":121,"props":3232,"children":3233},{},[3234],{"type":51,"value":2245},{"type":45,"tag":117,"props":3236,"children":3237},{},[3238],{"type":51,"value":3239},"Primary fuzzing engine used by OSS-Fuzz",{"type":45,"tag":95,"props":3241,"children":3242},{},[3243,3251],{"type":45,"tag":117,"props":3244,"children":3245},{},[3246],{"type":45,"tag":121,"props":3247,"children":3248},{},[3249],{"type":51,"value":3250},"aflpp",{"type":45,"tag":117,"props":3252,"children":3253},{},[3254],{"type":51,"value":3255},"Alternative fuzzing engine supported by OSS-Fuzz",{"type":45,"tag":95,"props":3257,"children":3258},{},[3259,3267],{"type":45,"tag":117,"props":3260,"children":3261},{},[3262],{"type":45,"tag":121,"props":3263,"children":3264},{},[3265],{"type":51,"value":3266},"atheris",{"type":45,"tag":117,"props":3268,"children":3269},{},[3270],{"type":51,"value":3271},"Used for fuzzing Python projects in OSS-Fuzz",{"type":45,"tag":95,"props":3273,"children":3274},{},[3275,3283],{"type":45,"tag":117,"props":3276,"children":3277},{},[3278],{"type":45,"tag":121,"props":3279,"children":3280},{},[3281],{"type":51,"value":3282},"cargo-fuzz",{"type":45,"tag":117,"props":3284,"children":3285},{},[3286],{"type":51,"value":3287},"Used for Rust projects in OSS-Fuzz",{"type":45,"tag":80,"props":3289,"children":3291},{"id":3290},"related-techniques",[3292],{"type":51,"value":3293},"Related Techniques",{"type":45,"tag":87,"props":3295,"children":3296},{},[3297,3312],{"type":45,"tag":91,"props":3298,"children":3299},{},[3300],{"type":45,"tag":95,"props":3301,"children":3302},{},[3303,3307],{"type":45,"tag":99,"props":3304,"children":3305},{},[3306],{"type":51,"value":3216},{"type":45,"tag":99,"props":3308,"children":3309},{},[3310],{"type":51,"value":3311},"Relationship",{"type":45,"tag":110,"props":3313,"children":3314},{},[3315,3331,3347,3363],{"type":45,"tag":95,"props":3316,"children":3317},{},[3318,3326],{"type":45,"tag":117,"props":3319,"children":3320},{},[3321],{"type":45,"tag":121,"props":3322,"children":3323},{},[3324],{"type":51,"value":3325},"coverage-analysis",{"type":45,"tag":117,"props":3327,"children":3328},{},[3329],{"type":51,"value":3330},"OSS-Fuzz generates coverage reports via helper.py",{"type":45,"tag":95,"props":3332,"children":3333},{},[3334,3342],{"type":45,"tag":117,"props":3335,"children":3336},{},[3337],{"type":45,"tag":121,"props":3338,"children":3339},{},[3340],{"type":51,"value":3341},"address-sanitizer",{"type":45,"tag":117,"props":3343,"children":3344},{},[3345],{"type":51,"value":3346},"Default sanitizer for OSS-Fuzz projects",{"type":45,"tag":95,"props":3348,"children":3349},{},[3350,3358],{"type":45,"tag":117,"props":3351,"children":3352},{},[3353],{"type":45,"tag":121,"props":3354,"children":3355},{},[3356],{"type":51,"value":3357},"fuzz-harness-writing",{"type":45,"tag":117,"props":3359,"children":3360},{},[3361],{"type":51,"value":3362},"Essential for enrolling projects in OSS-Fuzz",{"type":45,"tag":95,"props":3364,"children":3365},{},[3366,3374],{"type":45,"tag":117,"props":3367,"children":3368},{},[3369],{"type":45,"tag":121,"props":3370,"children":3371},{},[3372],{"type":51,"value":3373},"corpus-management",{"type":45,"tag":117,"props":3375,"children":3376},{},[3377],{"type":51,"value":3378},"OSS-Fuzz maintains corpus for enrolled projects",{"type":45,"tag":68,"props":3380,"children":3382},{"id":3381},"resources",[3383],{"type":51,"value":3384},"Resources",{"type":45,"tag":80,"props":3386,"children":3388},{"id":3387},"key-external-resources",[3389],{"type":51,"value":3390},"Key External Resources",{"type":45,"tag":54,"props":3392,"children":3393},{},[3394,3403],{"type":45,"tag":121,"props":3395,"children":3396},{},[3397],{"type":45,"tag":58,"props":3398,"children":3400},{"href":60,"rel":3399},[62],[3401],{"type":51,"value":3402},"OSS-Fuzz Official Documentation",{"type":51,"value":3404},"\nComprehensive documentation covering enrollment, harness writing, and troubleshooting for the OSS-Fuzz platform.",{"type":45,"tag":54,"props":3406,"children":3407},{},[3408,3418],{"type":45,"tag":121,"props":3409,"children":3410},{},[3411],{"type":45,"tag":58,"props":3412,"children":3415},{"href":3413,"rel":3414},"https:\u002F\u002Fgoogle.github.io\u002Foss-fuzz\u002Fgetting-started\u002Faccepting-new-projects\u002F",[62],[3416],{"type":51,"value":3417},"Getting Started Guide",{"type":51,"value":3419},"\nStep-by-step process for enrolling new projects into OSS-Fuzz, including requirements and approval process.",{"type":45,"tag":54,"props":3421,"children":3422},{},[3423,3432],{"type":45,"tag":121,"props":3424,"children":3425},{},[3426],{"type":45,"tag":58,"props":3427,"children":3429},{"href":2524,"rel":3428},[62],[3430],{"type":51,"value":3431},"cbor2 OSS-Fuzz Integration PR",{"type":51,"value":3433},"\nReal-world example of enrolling a Python project with C extensions into OSS-Fuzz. Shows:",{"type":45,"tag":226,"props":3435,"children":3436},{},[3437,3442,3447],{"type":45,"tag":230,"props":3438,"children":3439},{},[3440],{"type":51,"value":3441},"Initial proposal and project introduction",{"type":45,"tag":230,"props":3443,"children":3444},{},[3445],{"type":51,"value":3446},"Criticality score evaluation",{"type":45,"tag":230,"props":3448,"children":3449},{},[3450],{"type":51,"value":3451},"Complete implementation (project.yaml, Dockerfile, build.sh, harnesses)",{"type":45,"tag":54,"props":3453,"children":3454},{},[3455,3464],{"type":45,"tag":121,"props":3456,"children":3457},{},[3458],{"type":45,"tag":58,"props":3459,"children":3461},{"href":561,"rel":3460},[62],[3462],{"type":51,"value":3463},"Fuzz Introspector Case Studies",{"type":51,"value":3465},"\nExamples and explanations of using Fuzz Introspector to analyze coverage and identify fuzzing blockers.",{"type":45,"tag":80,"props":3467,"children":3469},{"id":3468},"video-resources",[3470],{"type":51,"value":3471},"Video Resources",{"type":45,"tag":54,"props":3473,"children":3474},{},[3475],{"type":51,"value":3476},"Check OSS-Fuzz documentation for workshop recordings and tutorials on enrollment and harness development.",{"type":45,"tag":3478,"props":3479,"children":3480},"style",{},[3481],{"type":51,"value":3482},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3484,"total":3630},[3485,3499,3508,3526,3541,3552,3562,3572,3585,3596,3608,3619],{"slug":3341,"name":3341,"fn":3486,"description":3487,"org":3488,"tags":3489,"stars":26,"repoUrl":27,"updatedAt":3498},"detect memory errors during fuzzing","AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C\u002FC++ code to find buffer overflows and use-after-free bugs.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3490,3493,3496,3497],{"name":3491,"slug":3492,"type":16},"C#","c",{"name":3494,"slug":3495,"type":16},"Debugging","debugging",{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},"2026-07-17T06:05:14.925095",{"slug":3250,"name":3250,"fn":3500,"description":3501,"org":3502,"tags":3503,"stars":26,"repoUrl":27,"updatedAt":3507},"perform multi-core fuzzing of C\u002FC++ projects","AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C\u002FC++ projects.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3504,3505,3506],{"name":3491,"slug":3492,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},"2026-07-17T06:05:12.433192",{"slug":3509,"name":3509,"fn":3510,"description":3511,"org":3512,"tags":3513,"stars":26,"repoUrl":27,"updatedAt":3525},"agentic-actions-auditor","audit GitHub Actions for security vulnerabilities","Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI\u002FCD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI\u002FCD pipeline security for prompt injection risks, or evaluating agentic action configurations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3514,3517,3518,3521,3524],{"name":3515,"slug":3516,"type":16},"Agents","agents",{"name":21,"slug":22,"type":16},{"name":3519,"slug":3520,"type":16},"Code Analysis","code-analysis",{"name":3522,"slug":3523,"type":16},"GitHub Actions","github-actions",{"name":14,"slug":15,"type":16},"2026-07-18T05:47:48.564744",{"slug":3527,"name":3527,"fn":3528,"description":3529,"org":3530,"tags":3531,"stars":26,"repoUrl":27,"updatedAt":3540},"algorand-vulnerability-scanner","scan Algorand smart contracts for vulnerabilities","Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL\u002FPyTeal).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3532,3535,3536,3537],{"name":3533,"slug":3534,"type":16},"Audit","audit",{"name":3519,"slug":3520,"type":16},{"name":14,"slug":15,"type":16},{"name":3538,"slug":3539,"type":16},"Smart Contracts","smart-contracts","2026-07-18T05:47:43.989063",{"slug":3542,"name":3542,"fn":3543,"description":3544,"org":3545,"tags":3546,"stars":26,"repoUrl":27,"updatedAt":3551},"ask-questions-if-underspecified","clarify requirements before implementation","Clarify requirements before implementing. Use when serious doubts arise.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3547,3548],{"name":18,"slug":19,"type":16},{"name":3549,"slug":3550,"type":16},"Productivity","productivity","2026-07-17T06:05:33.543262",{"slug":3266,"name":3266,"fn":3553,"description":3554,"org":3555,"tags":3556,"stars":26,"repoUrl":27,"updatedAt":3561},"fuzz Python code with Atheris","Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3557,3559,3560],{"name":3558,"slug":2542,"type":16},"Python",{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},"2026-07-17T06:05:14.575191",{"slug":3563,"name":3563,"fn":3564,"description":3565,"org":3566,"tags":3567,"stars":26,"repoUrl":27,"updatedAt":3571},"audit-augmentation","augment code graphs with audit findings","Augments Trailmark code graphs with external audit findings from SARIF static analysis results, weAudit annotation files, and version-gated Trailmark 0.4.x binary-analysis graph exports. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, importing binary graph findings, cross-referencing Semgrep, CodeQL, or binary-analysis findings with call graph data, or visualizing audit findings in the context of code structure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3568,3569,3570],{"name":3533,"slug":3534,"type":16},{"name":3519,"slug":3520,"type":16},{"name":14,"slug":15,"type":16},"2026-08-01T05:44:54.920542",{"slug":3573,"name":3573,"fn":3574,"description":3575,"org":3576,"tags":3577,"stars":26,"repoUrl":27,"updatedAt":3584},"audit-context-building","build architectural context for code analysis","Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3578,3581,3582,3583],{"name":3579,"slug":3580,"type":16},"Architecture","architecture",{"name":3533,"slug":3534,"type":16},{"name":3519,"slug":3520,"type":16},{"name":18,"slug":19,"type":16},"2026-07-18T05:47:40.122449",{"slug":3586,"name":3586,"fn":3587,"description":3588,"org":3589,"tags":3590,"stars":26,"repoUrl":27,"updatedAt":3595},"audit-prep-assistant","prepare codebases for security audits","Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3591,3592,3593,3594],{"name":3533,"slug":3534,"type":16},{"name":3519,"slug":3520,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},"2026-07-18T05:47:39.210985",{"slug":3597,"name":3597,"fn":3598,"description":3599,"org":3600,"tags":3601,"stars":26,"repoUrl":27,"updatedAt":3607},"burpsuite-project-parser","parse Burp Suite project files","Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3602,3603,3606],{"name":3533,"slug":3534,"type":16},{"name":3604,"slug":3605,"type":16},"CLI","cli",{"name":14,"slug":15,"type":16},"2026-07-17T06:05:33.198077",{"slug":3609,"name":3609,"fn":3610,"description":3611,"org":3612,"tags":3613,"stars":26,"repoUrl":27,"updatedAt":3618},"c-review","audit C and C++ code","Performs comprehensive C\u002FC++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities. Use when auditing native C\u002FC++ applications, reviewing daemons or services for memory safety, or hunting integer overflow \u002F use-after-free \u002F race conditions in userspace code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3614,3615,3616,3617],{"name":3533,"slug":3534,"type":16},{"name":3491,"slug":3492,"type":16},{"name":3519,"slug":3520,"type":16},{"name":14,"slug":15,"type":16},"2026-07-17T06:05:11.333374",{"slug":3620,"name":3620,"fn":3621,"description":3622,"org":3623,"tags":3624,"stars":26,"repoUrl":27,"updatedAt":3629},"cairo-vulnerability-scanner","scan Cairo and StarkNet contracts for vulnerabilities","Scans Cairo\u002FStarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3625,3626,3627,3628],{"name":3533,"slug":3534,"type":16},{"name":3519,"slug":3520,"type":16},{"name":14,"slug":15,"type":16},{"name":3538,"slug":3539,"type":16},"2026-07-18T05:47:42.84568",111,{"items":3632,"total":3678},[3633,3640,3646,3654,3661,3666,3672],{"slug":3341,"name":3341,"fn":3486,"description":3487,"org":3634,"tags":3635,"stars":26,"repoUrl":27,"updatedAt":3498},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3636,3637,3638,3639],{"name":3491,"slug":3492,"type":16},{"name":3494,"slug":3495,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"slug":3250,"name":3250,"fn":3500,"description":3501,"org":3641,"tags":3642,"stars":26,"repoUrl":27,"updatedAt":3507},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3643,3644,3645],{"name":3491,"slug":3492,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"slug":3509,"name":3509,"fn":3510,"description":3511,"org":3647,"tags":3648,"stars":26,"repoUrl":27,"updatedAt":3525},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3649,3650,3651,3652,3653],{"name":3515,"slug":3516,"type":16},{"name":21,"slug":22,"type":16},{"name":3519,"slug":3520,"type":16},{"name":3522,"slug":3523,"type":16},{"name":14,"slug":15,"type":16},{"slug":3527,"name":3527,"fn":3528,"description":3529,"org":3655,"tags":3656,"stars":26,"repoUrl":27,"updatedAt":3540},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3657,3658,3659,3660],{"name":3533,"slug":3534,"type":16},{"name":3519,"slug":3520,"type":16},{"name":14,"slug":15,"type":16},{"name":3538,"slug":3539,"type":16},{"slug":3542,"name":3542,"fn":3543,"description":3544,"org":3662,"tags":3663,"stars":26,"repoUrl":27,"updatedAt":3551},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3664,3665],{"name":18,"slug":19,"type":16},{"name":3549,"slug":3550,"type":16},{"slug":3266,"name":3266,"fn":3553,"description":3554,"org":3667,"tags":3668,"stars":26,"repoUrl":27,"updatedAt":3561},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3669,3670,3671],{"name":3558,"slug":2542,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"slug":3563,"name":3563,"fn":3564,"description":3565,"org":3673,"tags":3674,"stars":26,"repoUrl":27,"updatedAt":3571},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3675,3676,3677],{"name":3533,"slug":3534,"type":16},{"name":3519,"slug":3520,"type":16},{"name":14,"slug":15,"type":16},77]