[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-trail-of-bits-atheris":3,"mdc-4ash0o-key":35,"related-org-trail-of-bits-atheris":3961,"related-repo-trail-of-bits-atheris":4110},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":30,"sourceUrl":33,"mdContent":34},"atheris","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},"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],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":18,"slug":19,"type":16},"Python","python",{"name":21,"slug":22,"type":16},"Testing","testing",6139,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills","2026-07-17T06:05:14.575191",null,541,[29],"agent-skills",{"repoUrl":24,"stars":23,"forks":27,"topics":31,"description":32},[29],"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\u002Fatheris","---\nname: atheris\ntype: fuzzer\ndescription: >\n  Atheris is a coverage-guided Python fuzzer based on libFuzzer.\n  Use for fuzzing pure Python code and Python C extensions.\n---\n\n# Atheris\n\nAtheris is a coverage-guided Python fuzzer built on libFuzzer. It enables fuzzing of both pure Python code and Python C extensions with integrated AddressSanitizer support for detecting memory corruption issues.\n\n## When to Use\n\n| Fuzzer | Best For | Complexity |\n|--------|----------|------------|\n| Atheris | Python code and C extensions | Low-Medium |\n| Hypothesis | Property-based testing | Low |\n| python-afl | AFL-style fuzzing | Medium |\n\n**Choose Atheris when:**\n- Fuzzing pure Python code with coverage guidance\n- Testing Python C extensions for memory corruption\n- Integration with libFuzzer ecosystem is desired\n- AddressSanitizer support is needed\n\n## Quick Start\n\n```python\nimport sys\nimport atheris\n\n@atheris.instrument_func\ndef test_one_input(data: bytes):\n    if len(data) == 4:\n        if data[0] == 0x46:  # \"F\"\n            if data[1] == 0x55:  # \"U\"\n                if data[2] == 0x5A:  # \"Z\"\n                    if data[3] == 0x5A:  # \"Z\"\n                        raise RuntimeError(\"You caught me\")\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n```\n\nRun:\n```bash\npython fuzz.py\n```\n\n## Installation\n\nAtheris supports 32-bit and 64-bit Linux, and macOS. We recommend fuzzing on Linux because it's simpler to manage and often faster.\n\n### Prerequisites\n\n- Python 3.7 or later\n- Recent version of clang (preferably [latest release](https:\u002F\u002Fgithub.com\u002Fllvm\u002Fllvm-project\u002Freleases))\n- For Docker users: [Docker Desktop](https:\u002F\u002Fwww.docker.com\u002Fproducts\u002Fdocker-desktop\u002F)\n\n### Linux\u002FmacOS\n\n```bash\nuv pip install atheris\n```\n\n### Docker Environment (Recommended)\n\nFor a fully operational Linux environment with all dependencies configured:\n\n```dockerfile\n# https:\u002F\u002Fhub.docker.com\u002F_\u002Fpython\nARG PYTHON_VERSION=3.11\n\nFROM python:$PYTHON_VERSION-slim-bookworm\n\nRUN python --version\n\nRUN apt update && apt install -y \\\n    ca-certificates \\\n    wget \\\n    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\n# LLVM builds version 15-19 for Debian 12 (Bookworm)\n# https:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002Fdists\u002F\nARG LLVM_VERSION=19\n\nRUN echo \"deb http:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002F llvm-toolchain-bookworm-$LLVM_VERSION main\" > \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fllvm.list\nRUN echo \"deb-src http:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002F llvm-toolchain-bookworm-$LLVM_VERSION main\" >> \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fllvm.list\nRUN wget -qO- https:\u002F\u002Fapt.llvm.org\u002Fllvm-snapshot.gpg.key > \u002Fetc\u002Fapt\u002Ftrusted.gpg.d\u002Fapt.llvm.org.asc\n\nRUN apt update && apt install -y \\\n    build-essential \\\n    clang-$LLVM_VERSION \\\n    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\nENV APP_DIR \"\u002Fapp\"\nRUN mkdir $APP_DIR\nWORKDIR $APP_DIR\n\nENV VIRTUAL_ENV \"\u002Fopt\u002Fvenv\"\nRUN python -m venv $VIRTUAL_ENV\nENV PATH \"$VIRTUAL_ENV\u002Fbin:$PATH\"\n\n# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#step-1-compiling-your-extension\nENV CC=\"clang-$LLVM_VERSION\"\nENV CFLAGS \"-fsanitize=address,fuzzer-no-link\"\nENV CXX=\"clang++-$LLVM_VERSION\"\nENV CXXFLAGS \"-fsanitize=address,fuzzer-no-link\"\nENV LDSHARED=\"clang-$LLVM_VERSION -shared\"\nENV LDSHAREDXX=\"clang++-$LLVM_VERSION -shared\"\nENV ASAN_SYMBOLIZER_PATH=\"\u002Fusr\u002Fbin\u002Fllvm-symbolizer-$LLVM_VERSION\"\n\n# Allow Atheris to find fuzzer sanitizer shared libs\n# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris#building-from-source\nRUN LIBFUZZER_LIB=$($CC -print-file-name=libclang_rt.fuzzer_no_main-$(uname -m).a) \\\n    python -m pip install --no-binary atheris atheris\n\n# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#option-a-sanitizerlibfuzzer-preloads\nENV LD_PRELOAD \"$VIRTUAL_ENV\u002Flib\u002Fpython3.11\u002Fsite-packages\u002Fasan_with_fuzzer.so\"\n\n# 1. Skip memory allocation failures for now, they are common, and low impact (DoS)\n# 2. https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#leak-detection\nENV ASAN_OPTIONS \"allocator_may_return_null=1,detect_leaks=0\"\n\nCMD [\"\u002Fbin\u002Fbash\"]\n```\n\nBuild and run:\n```bash\ndocker build -t atheris .\ndocker run -it atheris\n```\n\n### Verification\n\n```bash\npython -c \"import atheris; print(atheris.__version__)\"\n```\n\n## Writing a Harness\n\n### Harness Structure for Pure Python\n\n```python\nimport sys\nimport atheris\n\n@atheris.instrument_func\ndef test_one_input(data: bytes):\n    \"\"\"\n    Fuzzing entry point. Called with random byte sequences.\n\n    Args:\n        data: Random bytes generated by the fuzzer\n    \"\"\"\n    # Add input validation if needed\n    if len(data) \u003C 1:\n        return\n\n    # Call your target function\n    try:\n        your_target_function(data)\n    except ValueError:\n        # Expected exceptions should be caught\n        pass\n    # Let unexpected exceptions crash (that's what we're looking for!)\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Harness Rules\n\n| Do | Don't |\n|----|-------|\n| Use `@atheris.instrument_func` for coverage | Forget to instrument target code |\n| Catch expected exceptions | Catch all exceptions indiscriminately |\n| Use `atheris.instrument_imports()` for libraries | Import modules after `atheris.Setup()` |\n| Keep harness deterministic | Use randomness or time-based behavior |\n\n> **See Also:** For detailed harness writing techniques, patterns for handling complex inputs,\n> and advanced strategies, see the **fuzz-harness-writing** technique skill.\n\n## Fuzzing Pure Python Code\n\nFor fuzzing broader parts of an application or library, use instrumentation functions:\n\n```python\nimport atheris\nwith atheris.instrument_imports():\n    import your_module\n    from another_module import target_function\n\ndef test_one_input(data: bytes):\n    target_function(data)\n\natheris.Setup(sys.argv, test_one_input)\natheris.Fuzz()\n```\n\n**Instrumentation Options:**\n- `atheris.instrument_func` - Decorator for single function instrumentation\n- `atheris.instrument_imports()` - Context manager for instrumenting all imported modules\n- `atheris.instrument_all()` - Instrument all Python code system-wide\n\n## Fuzzing Python C Extensions\n\nPython C extensions require compilation with specific flags for instrumentation and sanitizer support.\n\n### Environment Configuration\n\nIf using the provided Dockerfile, these are already configured. For local setup:\n\n```bash\nexport CC=\"clang\"\nexport CFLAGS=\"-fsanitize=address,fuzzer-no-link\"\nexport CXX=\"clang++\"\nexport CXXFLAGS=\"-fsanitize=address,fuzzer-no-link\"\nexport LDSHARED=\"clang -shared\"\n```\n\n### Example: Fuzzing cbor2\n\nInstall the extension from source:\n```bash\nCBOR2_BUILD_C_EXTENSION=1 python -m pip install --no-binary cbor2 cbor2==5.6.4\n```\n\nThe `--no-binary` flag ensures the C extension is compiled locally with instrumentation.\n\nCreate `cbor2-fuzz.py`:\n```python\nimport sys\nimport atheris\n\n# _cbor2 ensures the C library is imported\nfrom _cbor2 import loads\n\ndef test_one_input(data: bytes):\n    try:\n        loads(data)\n    except Exception:\n        # We're searching for memory corruption, not Python exceptions\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n```\n\nRun:\n```bash\npython cbor2-fuzz.py\n```\n\n> **Important:** When running locally (not in Docker), you must [set `LD_PRELOAD` manually](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#option-a-sanitizerlibfuzzer-preloads).\n\n## Corpus Management\n\n### Creating Initial Corpus\n\n```bash\nmkdir corpus\n# Add seed inputs\necho \"test data\" > corpus\u002Fseed1\necho '{\"key\": \"value\"}' > corpus\u002Fseed2\n```\n\nRun with corpus:\n```bash\npython fuzz.py corpus\u002F\n```\n\n### Corpus Minimization\n\nAtheris inherits corpus minimization from libFuzzer:\n```bash\npython fuzz.py -merge=1 new_corpus\u002F old_corpus\u002F\n```\n\n> **See Also:** For corpus creation strategies, dictionaries, and seed selection,\n> see the **fuzzing-corpus** technique skill.\n\n## Running Campaigns\n\n### Basic Run\n\n```bash\npython fuzz.py\n```\n\n### With Corpus Directory\n\n```bash\npython fuzz.py corpus\u002F\n```\n\n### Common Options\n\n```bash\n# Run for 10 minutes\npython fuzz.py -max_total_time=600\n\n# Limit input size\npython fuzz.py -max_len=1024\n\n# Run with multiple workers\npython fuzz.py -workers=4 -jobs=4\n```\n\n### Interpreting Output\n\n| Output | Meaning |\n|--------|---------|\n| `NEW    cov: X` | Found new coverage, corpus expanded |\n| `pulse  cov: X` | Periodic status update |\n| `exec\u002Fs: X` | Executions per second (throughput) |\n| `corp: X\u002FYb` | Corpus size: X inputs, Y bytes total |\n| `ERROR: libFuzzer` | Crash detected |\n\n## Sanitizer Integration\n\n### AddressSanitizer (ASan)\n\nAddressSanitizer is automatically integrated when using the provided Docker environment or when compiling with appropriate flags.\n\nFor local setup:\n```bash\nexport CFLAGS=\"-fsanitize=address,fuzzer-no-link\"\nexport CXXFLAGS=\"-fsanitize=address,fuzzer-no-link\"\n```\n\nConfigure ASan behavior:\n```bash\nexport ASAN_OPTIONS=\"allocator_may_return_null=1,detect_leaks=0\"\n```\n\n### LD_PRELOAD Configuration\n\nFor native extension fuzzing:\n```bash\nexport LD_PRELOAD=\"$(python -c 'import atheris; import os; print(os.path.join(os.path.dirname(atheris.__file__), \"asan_with_fuzzer.so\"))')\"\n```\n\n> **See Also:** For detailed sanitizer configuration, common issues, and advanced flags,\n> see the **address-sanitizer** and **undefined-behavior-sanitizer** technique skills.\n\n### Common Sanitizer Issues\n\n| Issue | Solution |\n|-------|----------|\n| `LD_PRELOAD` not set | Export `LD_PRELOAD` to point to `asan_with_fuzzer.so` |\n| Memory allocation failures | Set `ASAN_OPTIONS=allocator_may_return_null=1` |\n| Leak detection noise | Set `ASAN_OPTIONS=detect_leaks=0` |\n| Missing symbolizer | Set `ASAN_SYMBOLIZER_PATH` to `llvm-symbolizer` |\n\n## Advanced Usage\n\n### Tips and Tricks\n\n| Tip | Why It Helps |\n|-----|--------------|\n| Use `atheris.instrument_imports()` early | Ensures all imports are instrumented for coverage |\n| Start with small `max_len` | Faster initial fuzzing, gradually increase |\n| Use dictionaries for structured formats | Helps fuzzer understand format tokens |\n| Run multiple parallel instances | Better coverage exploration |\n\n### Custom Instrumentation\n\nFine-tune what gets instrumented:\n```python\nimport atheris\n\n# Instrument only specific modules\nwith atheris.instrument_imports():\n    import target_module\n# Don't instrument test harness code\n\ndef test_one_input(data: bytes):\n    target_module.parse(data)\n```\n\n### Performance Tuning\n\n| Setting | Impact |\n|---------|--------|\n| `-max_len=N` | Smaller values = faster execution |\n| `-workers=N -jobs=N` | Parallel fuzzing for faster coverage |\n| `ASAN_OPTIONS=fast_unwind_on_malloc=0` | Better stack traces, slower execution |\n\n### UndefinedBehaviorSanitizer (UBSan)\n\nAdd UBSan to catch additional bugs:\n```bash\nexport CFLAGS=\"-fsanitize=address,undefined,fuzzer-no-link\"\nexport CXXFLAGS=\"-fsanitize=address,undefined,fuzzer-no-link\"\n```\n\nNote: Modify flags in Dockerfile if using containerized setup.\n\n## Real-World Examples\n\n### Example: Pure Python Parser\n\n```python\nimport sys\nimport atheris\nimport json\n\n@atheris.instrument_func\ndef test_one_input(data: bytes):\n    try:\n        # Fuzz Python's JSON parser\n        json.loads(data.decode('utf-8', errors='ignore'))\n    except (ValueError, UnicodeDecodeError):\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Example: HTTP Request Parsing\n\n```python\nimport sys\nimport atheris\n\nwith atheris.instrument_imports():\n    from urllib3 import HTTPResponse\n    from io import BytesIO\n\ndef test_one_input(data: bytes):\n    try:\n        # Fuzz HTTP response parsing\n        fake_response = HTTPResponse(\n            body=BytesIO(data),\n            headers={},\n            preload_content=False\n        )\n        fake_response.read()\n    except Exception:\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n## Troubleshooting\n\n| Problem | Cause | Solution |\n|---------|-------|----------|\n| No coverage increase | Poor seed corpus or target not instrumented | Add better seeds, verify `instrument_imports()` |\n| Slow execution | ASan overhead or large inputs | Reduce `max_len`, use `ASAN_OPTIONS=fast_unwind_on_malloc=1` |\n| Import errors | Modules imported before instrumentation | Move imports inside `instrument_imports()` context |\n| Segfault without ASan output | Missing `LD_PRELOAD` | Set `LD_PRELOAD` to `asan_with_fuzzer.so` path |\n| Build failures | Wrong compiler or missing flags | Verify `CC`, `CFLAGS`, and clang version |\n\n## Related Skills\n\n### Technique Skills\n\n| Skill | Use Case |\n|-------|----------|\n| **fuzz-harness-writing** | Detailed guidance on writing effective harnesses |\n| **address-sanitizer** | Memory error detection during fuzzing |\n| **undefined-behavior-sanitizer** | Catching undefined behavior in C extensions |\n| **coverage-analysis** | Measuring and improving code coverage |\n| **fuzzing-corpus** | Building and managing seed corpora |\n\n### Related Fuzzers\n\n| Skill | When to Consider |\n|-------|------------------|\n| **hypothesis** | Property-based testing with type-aware generation |\n| **python-afl** | AFL-style fuzzing for Python when Atheris isn't available |\n\n## Resources\n\n### Key External Resources\n\n**[Atheris GitHub Repository](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris)**\nOfficial repository with installation instructions, examples, and documentation for fuzzing both pure Python and native extensions.\n\n**[Native Extension Fuzzing Guide](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md)**\nComprehensive guide covering compilation flags, LD_PRELOAD setup, sanitizer configuration, and troubleshooting for Python C extensions.\n\n**[Continuously Fuzzing Python C Extensions](https:\u002F\u002Fblog.trailofbits.com\u002F2024\u002F02\u002F23\u002Fcontinuously-fuzzing-python-c-extensions\u002F)**\nTrail of Bits blog post covering CI\u002FCD integration, ClusterFuzzLite setup, and real-world examples of fuzzing Python C extensions in continuous integration pipelines.\n\n**[ClusterFuzzLite Python Integration](https:\u002F\u002Fgoogle.github.io\u002Fclusterfuzzlite\u002Fbuild-integration\u002Fpython-lang\u002F)**\nGuide for integrating Atheris fuzzing into CI\u002FCD pipelines using ClusterFuzzLite for automated continuous fuzzing.\n\n### Video Resources\n\nVideos and tutorials are available in the main Atheris documentation and libFuzzer resources.\n",{"data":36,"body":38},{"name":4,"type":37,"description":6},"fuzzer",{"type":39,"children":40},"root",[41,49,55,62,148,157,182,188,362,367,390,396,401,408,444,450,480,486,491,962,967,1023,1029,1064,1070,1076,1300,1306,1401,1422,1428,1433,1516,1524,1559,1565,1570,1576,1581,1737,1743,1748,1811,1824,1837,1982,1986,2005,2035,2041,2047,2139,2144,2168,2174,2179,2212,2230,2236,2242,2259,2265,2286,2292,2390,2396,2503,2509,2515,2520,2525,2586,2591,2627,2633,2638,2689,2715,2721,2837,2843,2849,2935,2941,2946,3020,3026,3099,3105,3110,3172,3177,3183,3189,3326,3332,3523,3529,3704,3710,3716,3814,3820,3872,3878,3884,3899,3914,3929,3944,3950,3955],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":48},"text","Atheris",{"type":42,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Atheris is a coverage-guided Python fuzzer built on libFuzzer. It enables fuzzing of both pure Python code and Python C extensions with integrated AddressSanitizer support for detecting memory corruption issues.",{"type":42,"tag":56,"props":57,"children":59},"h2",{"id":58},"when-to-use",[60],{"type":47,"value":61},"When to Use",{"type":42,"tag":63,"props":64,"children":65},"table",{},[66,90],{"type":42,"tag":67,"props":68,"children":69},"thead",{},[70],{"type":42,"tag":71,"props":72,"children":73},"tr",{},[74,80,85],{"type":42,"tag":75,"props":76,"children":77},"th",{},[78],{"type":47,"value":79},"Fuzzer",{"type":42,"tag":75,"props":81,"children":82},{},[83],{"type":47,"value":84},"Best For",{"type":42,"tag":75,"props":86,"children":87},{},[88],{"type":47,"value":89},"Complexity",{"type":42,"tag":91,"props":92,"children":93},"tbody",{},[94,112,130],{"type":42,"tag":71,"props":95,"children":96},{},[97,102,107],{"type":42,"tag":98,"props":99,"children":100},"td",{},[101],{"type":47,"value":48},{"type":42,"tag":98,"props":103,"children":104},{},[105],{"type":47,"value":106},"Python code and C extensions",{"type":42,"tag":98,"props":108,"children":109},{},[110],{"type":47,"value":111},"Low-Medium",{"type":42,"tag":71,"props":113,"children":114},{},[115,120,125],{"type":42,"tag":98,"props":116,"children":117},{},[118],{"type":47,"value":119},"Hypothesis",{"type":42,"tag":98,"props":121,"children":122},{},[123],{"type":47,"value":124},"Property-based testing",{"type":42,"tag":98,"props":126,"children":127},{},[128],{"type":47,"value":129},"Low",{"type":42,"tag":71,"props":131,"children":132},{},[133,138,143],{"type":42,"tag":98,"props":134,"children":135},{},[136],{"type":47,"value":137},"python-afl",{"type":42,"tag":98,"props":139,"children":140},{},[141],{"type":47,"value":142},"AFL-style fuzzing",{"type":42,"tag":98,"props":144,"children":145},{},[146],{"type":47,"value":147},"Medium",{"type":42,"tag":50,"props":149,"children":150},{},[151],{"type":42,"tag":152,"props":153,"children":154},"strong",{},[155],{"type":47,"value":156},"Choose Atheris when:",{"type":42,"tag":158,"props":159,"children":160},"ul",{},[161,167,172,177],{"type":42,"tag":162,"props":163,"children":164},"li",{},[165],{"type":47,"value":166},"Fuzzing pure Python code with coverage guidance",{"type":42,"tag":162,"props":168,"children":169},{},[170],{"type":47,"value":171},"Testing Python C extensions for memory corruption",{"type":42,"tag":162,"props":173,"children":174},{},[175],{"type":47,"value":176},"Integration with libFuzzer ecosystem is desired",{"type":42,"tag":162,"props":178,"children":179},{},[180],{"type":47,"value":181},"AddressSanitizer support is needed",{"type":42,"tag":56,"props":183,"children":185},{"id":184},"quick-start",[186],{"type":47,"value":187},"Quick Start",{"type":42,"tag":189,"props":190,"children":194},"pre",{"className":191,"code":192,"language":19,"meta":193,"style":193},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import sys\nimport atheris\n\n@atheris.instrument_func\ndef test_one_input(data: bytes):\n    if len(data) == 4:\n        if data[0] == 0x46:  # \"F\"\n            if data[1] == 0x55:  # \"U\"\n                if data[2] == 0x5A:  # \"Z\"\n                    if data[3] == 0x5A:  # \"Z\"\n                        raise RuntimeError(\"You caught me\")\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n","",[195],{"type":42,"tag":196,"props":197,"children":198},"code",{"__ignoreMap":193},[199,210,219,229,238,247,256,265,274,283,292,301,309,318,327,336,344,353],{"type":42,"tag":200,"props":201,"children":204},"span",{"class":202,"line":203},"line",1,[205],{"type":42,"tag":200,"props":206,"children":207},{},[208],{"type":47,"value":209},"import sys\n",{"type":42,"tag":200,"props":211,"children":213},{"class":202,"line":212},2,[214],{"type":42,"tag":200,"props":215,"children":216},{},[217],{"type":47,"value":218},"import atheris\n",{"type":42,"tag":200,"props":220,"children":222},{"class":202,"line":221},3,[223],{"type":42,"tag":200,"props":224,"children":226},{"emptyLinePlaceholder":225},true,[227],{"type":47,"value":228},"\n",{"type":42,"tag":200,"props":230,"children":232},{"class":202,"line":231},4,[233],{"type":42,"tag":200,"props":234,"children":235},{},[236],{"type":47,"value":237},"@atheris.instrument_func\n",{"type":42,"tag":200,"props":239,"children":241},{"class":202,"line":240},5,[242],{"type":42,"tag":200,"props":243,"children":244},{},[245],{"type":47,"value":246},"def test_one_input(data: bytes):\n",{"type":42,"tag":200,"props":248,"children":250},{"class":202,"line":249},6,[251],{"type":42,"tag":200,"props":252,"children":253},{},[254],{"type":47,"value":255},"    if len(data) == 4:\n",{"type":42,"tag":200,"props":257,"children":259},{"class":202,"line":258},7,[260],{"type":42,"tag":200,"props":261,"children":262},{},[263],{"type":47,"value":264},"        if data[0] == 0x46:  # \"F\"\n",{"type":42,"tag":200,"props":266,"children":268},{"class":202,"line":267},8,[269],{"type":42,"tag":200,"props":270,"children":271},{},[272],{"type":47,"value":273},"            if data[1] == 0x55:  # \"U\"\n",{"type":42,"tag":200,"props":275,"children":277},{"class":202,"line":276},9,[278],{"type":42,"tag":200,"props":279,"children":280},{},[281],{"type":47,"value":282},"                if data[2] == 0x5A:  # \"Z\"\n",{"type":42,"tag":200,"props":284,"children":286},{"class":202,"line":285},10,[287],{"type":42,"tag":200,"props":288,"children":289},{},[290],{"type":47,"value":291},"                    if data[3] == 0x5A:  # \"Z\"\n",{"type":42,"tag":200,"props":293,"children":295},{"class":202,"line":294},11,[296],{"type":42,"tag":200,"props":297,"children":298},{},[299],{"type":47,"value":300},"                        raise RuntimeError(\"You caught me\")\n",{"type":42,"tag":200,"props":302,"children":304},{"class":202,"line":303},12,[305],{"type":42,"tag":200,"props":306,"children":307},{"emptyLinePlaceholder":225},[308],{"type":47,"value":228},{"type":42,"tag":200,"props":310,"children":312},{"class":202,"line":311},13,[313],{"type":42,"tag":200,"props":314,"children":315},{},[316],{"type":47,"value":317},"def main():\n",{"type":42,"tag":200,"props":319,"children":321},{"class":202,"line":320},14,[322],{"type":42,"tag":200,"props":323,"children":324},{},[325],{"type":47,"value":326},"    atheris.Setup(sys.argv, test_one_input)\n",{"type":42,"tag":200,"props":328,"children":330},{"class":202,"line":329},15,[331],{"type":42,"tag":200,"props":332,"children":333},{},[334],{"type":47,"value":335},"    atheris.Fuzz()\n",{"type":42,"tag":200,"props":337,"children":339},{"class":202,"line":338},16,[340],{"type":42,"tag":200,"props":341,"children":342},{"emptyLinePlaceholder":225},[343],{"type":47,"value":228},{"type":42,"tag":200,"props":345,"children":347},{"class":202,"line":346},17,[348],{"type":42,"tag":200,"props":349,"children":350},{},[351],{"type":47,"value":352},"if __name__ == \"__main__\":\n",{"type":42,"tag":200,"props":354,"children":356},{"class":202,"line":355},18,[357],{"type":42,"tag":200,"props":358,"children":359},{},[360],{"type":47,"value":361},"    main()\n",{"type":42,"tag":50,"props":363,"children":364},{},[365],{"type":47,"value":366},"Run:",{"type":42,"tag":189,"props":368,"children":372},{"className":369,"code":370,"language":371,"meta":193,"style":193},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python fuzz.py\n","bash",[373],{"type":42,"tag":196,"props":374,"children":375},{"__ignoreMap":193},[376],{"type":42,"tag":200,"props":377,"children":378},{"class":202,"line":203},[379,384],{"type":42,"tag":200,"props":380,"children":382},{"style":381},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[383],{"type":47,"value":19},{"type":42,"tag":200,"props":385,"children":387},{"style":386},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[388],{"type":47,"value":389}," fuzz.py\n",{"type":42,"tag":56,"props":391,"children":393},{"id":392},"installation",[394],{"type":47,"value":395},"Installation",{"type":42,"tag":50,"props":397,"children":398},{},[399],{"type":47,"value":400},"Atheris supports 32-bit and 64-bit Linux, and macOS. We recommend fuzzing on Linux because it's simpler to manage and often faster.",{"type":42,"tag":402,"props":403,"children":405},"h3",{"id":404},"prerequisites",[406],{"type":47,"value":407},"Prerequisites",{"type":42,"tag":158,"props":409,"children":410},{},[411,416,432],{"type":42,"tag":162,"props":412,"children":413},{},[414],{"type":47,"value":415},"Python 3.7 or later",{"type":42,"tag":162,"props":417,"children":418},{},[419,421,430],{"type":47,"value":420},"Recent version of clang (preferably ",{"type":42,"tag":422,"props":423,"children":427},"a",{"href":424,"rel":425},"https:\u002F\u002Fgithub.com\u002Fllvm\u002Fllvm-project\u002Freleases",[426],"nofollow",[428],{"type":47,"value":429},"latest release",{"type":47,"value":431},")",{"type":42,"tag":162,"props":433,"children":434},{},[435,437],{"type":47,"value":436},"For Docker users: ",{"type":42,"tag":422,"props":438,"children":441},{"href":439,"rel":440},"https:\u002F\u002Fwww.docker.com\u002Fproducts\u002Fdocker-desktop\u002F",[426],[442],{"type":47,"value":443},"Docker Desktop",{"type":42,"tag":402,"props":445,"children":447},{"id":446},"linuxmacos",[448],{"type":47,"value":449},"Linux\u002FmacOS",{"type":42,"tag":189,"props":451,"children":453},{"className":369,"code":452,"language":371,"meta":193,"style":193},"uv pip install atheris\n",[454],{"type":42,"tag":196,"props":455,"children":456},{"__ignoreMap":193},[457],{"type":42,"tag":200,"props":458,"children":459},{"class":202,"line":203},[460,465,470,475],{"type":42,"tag":200,"props":461,"children":462},{"style":381},[463],{"type":47,"value":464},"uv",{"type":42,"tag":200,"props":466,"children":467},{"style":386},[468],{"type":47,"value":469}," pip",{"type":42,"tag":200,"props":471,"children":472},{"style":386},[473],{"type":47,"value":474}," install",{"type":42,"tag":200,"props":476,"children":477},{"style":386},[478],{"type":47,"value":479}," atheris\n",{"type":42,"tag":402,"props":481,"children":483},{"id":482},"docker-environment-recommended",[484],{"type":47,"value":485},"Docker Environment (Recommended)",{"type":42,"tag":50,"props":487,"children":488},{},[489],{"type":47,"value":490},"For a fully operational Linux environment with all dependencies configured:",{"type":42,"tag":189,"props":492,"children":496},{"className":493,"code":494,"language":495,"meta":193,"style":193},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# https:\u002F\u002Fhub.docker.com\u002F_\u002Fpython\nARG PYTHON_VERSION=3.11\n\nFROM python:$PYTHON_VERSION-slim-bookworm\n\nRUN python --version\n\nRUN apt update && apt install -y \\\n    ca-certificates \\\n    wget \\\n    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\n# LLVM builds version 15-19 for Debian 12 (Bookworm)\n# https:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002Fdists\u002F\nARG LLVM_VERSION=19\n\nRUN echo \"deb http:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002F llvm-toolchain-bookworm-$LLVM_VERSION main\" > \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fllvm.list\nRUN echo \"deb-src http:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002F llvm-toolchain-bookworm-$LLVM_VERSION main\" >> \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fllvm.list\nRUN wget -qO- https:\u002F\u002Fapt.llvm.org\u002Fllvm-snapshot.gpg.key > \u002Fetc\u002Fapt\u002Ftrusted.gpg.d\u002Fapt.llvm.org.asc\n\nRUN apt update && apt install -y \\\n    build-essential \\\n    clang-$LLVM_VERSION \\\n    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\nENV APP_DIR \"\u002Fapp\"\nRUN mkdir $APP_DIR\nWORKDIR $APP_DIR\n\nENV VIRTUAL_ENV \"\u002Fopt\u002Fvenv\"\nRUN python -m venv $VIRTUAL_ENV\nENV PATH \"$VIRTUAL_ENV\u002Fbin:$PATH\"\n\n# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#step-1-compiling-your-extension\nENV CC=\"clang-$LLVM_VERSION\"\nENV CFLAGS \"-fsanitize=address,fuzzer-no-link\"\nENV CXX=\"clang++-$LLVM_VERSION\"\nENV CXXFLAGS \"-fsanitize=address,fuzzer-no-link\"\nENV LDSHARED=\"clang-$LLVM_VERSION -shared\"\nENV LDSHAREDXX=\"clang++-$LLVM_VERSION -shared\"\nENV ASAN_SYMBOLIZER_PATH=\"\u002Fusr\u002Fbin\u002Fllvm-symbolizer-$LLVM_VERSION\"\n\n# Allow Atheris to find fuzzer sanitizer shared libs\n# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris#building-from-source\nRUN LIBFUZZER_LIB=$($CC -print-file-name=libclang_rt.fuzzer_no_main-$(uname -m).a) \\\n    python -m pip install --no-binary atheris atheris\n\n# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#option-a-sanitizerlibfuzzer-preloads\nENV LD_PRELOAD \"$VIRTUAL_ENV\u002Flib\u002Fpython3.11\u002Fsite-packages\u002Fasan_with_fuzzer.so\"\n\n# 1. Skip memory allocation failures for now, they are common, and low impact (DoS)\n# 2. https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#leak-detection\nENV ASAN_OPTIONS \"allocator_may_return_null=1,detect_leaks=0\"\n\nCMD [\"\u002Fbin\u002Fbash\"]\n","dockerfile",[497],{"type":42,"tag":196,"props":498,"children":499},{"__ignoreMap":193},[500,508,516,523,531,538,546,553,561,569,577,585,592,600,608,616,623,631,639,648,656,664,673,682,690,698,707,716,725,733,742,751,760,768,777,786,795,804,813,822,831,840,848,857,866,875,884,892,901,910,918,927,936,945,953],{"type":42,"tag":200,"props":501,"children":502},{"class":202,"line":203},[503],{"type":42,"tag":200,"props":504,"children":505},{},[506],{"type":47,"value":507},"# https:\u002F\u002Fhub.docker.com\u002F_\u002Fpython\n",{"type":42,"tag":200,"props":509,"children":510},{"class":202,"line":212},[511],{"type":42,"tag":200,"props":512,"children":513},{},[514],{"type":47,"value":515},"ARG PYTHON_VERSION=3.11\n",{"type":42,"tag":200,"props":517,"children":518},{"class":202,"line":221},[519],{"type":42,"tag":200,"props":520,"children":521},{"emptyLinePlaceholder":225},[522],{"type":47,"value":228},{"type":42,"tag":200,"props":524,"children":525},{"class":202,"line":231},[526],{"type":42,"tag":200,"props":527,"children":528},{},[529],{"type":47,"value":530},"FROM python:$PYTHON_VERSION-slim-bookworm\n",{"type":42,"tag":200,"props":532,"children":533},{"class":202,"line":240},[534],{"type":42,"tag":200,"props":535,"children":536},{"emptyLinePlaceholder":225},[537],{"type":47,"value":228},{"type":42,"tag":200,"props":539,"children":540},{"class":202,"line":249},[541],{"type":42,"tag":200,"props":542,"children":543},{},[544],{"type":47,"value":545},"RUN python --version\n",{"type":42,"tag":200,"props":547,"children":548},{"class":202,"line":258},[549],{"type":42,"tag":200,"props":550,"children":551},{"emptyLinePlaceholder":225},[552],{"type":47,"value":228},{"type":42,"tag":200,"props":554,"children":555},{"class":202,"line":267},[556],{"type":42,"tag":200,"props":557,"children":558},{},[559],{"type":47,"value":560},"RUN apt update && apt install -y \\\n",{"type":42,"tag":200,"props":562,"children":563},{"class":202,"line":276},[564],{"type":42,"tag":200,"props":565,"children":566},{},[567],{"type":47,"value":568},"    ca-certificates \\\n",{"type":42,"tag":200,"props":570,"children":571},{"class":202,"line":285},[572],{"type":42,"tag":200,"props":573,"children":574},{},[575],{"type":47,"value":576},"    wget \\\n",{"type":42,"tag":200,"props":578,"children":579},{"class":202,"line":294},[580],{"type":42,"tag":200,"props":581,"children":582},{},[583],{"type":47,"value":584},"    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n",{"type":42,"tag":200,"props":586,"children":587},{"class":202,"line":303},[588],{"type":42,"tag":200,"props":589,"children":590},{"emptyLinePlaceholder":225},[591],{"type":47,"value":228},{"type":42,"tag":200,"props":593,"children":594},{"class":202,"line":311},[595],{"type":42,"tag":200,"props":596,"children":597},{},[598],{"type":47,"value":599},"# LLVM builds version 15-19 for Debian 12 (Bookworm)\n",{"type":42,"tag":200,"props":601,"children":602},{"class":202,"line":320},[603],{"type":42,"tag":200,"props":604,"children":605},{},[606],{"type":47,"value":607},"# https:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002Fdists\u002F\n",{"type":42,"tag":200,"props":609,"children":610},{"class":202,"line":329},[611],{"type":42,"tag":200,"props":612,"children":613},{},[614],{"type":47,"value":615},"ARG LLVM_VERSION=19\n",{"type":42,"tag":200,"props":617,"children":618},{"class":202,"line":338},[619],{"type":42,"tag":200,"props":620,"children":621},{"emptyLinePlaceholder":225},[622],{"type":47,"value":228},{"type":42,"tag":200,"props":624,"children":625},{"class":202,"line":346},[626],{"type":42,"tag":200,"props":627,"children":628},{},[629],{"type":47,"value":630},"RUN echo \"deb http:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002F llvm-toolchain-bookworm-$LLVM_VERSION main\" > \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fllvm.list\n",{"type":42,"tag":200,"props":632,"children":633},{"class":202,"line":355},[634],{"type":42,"tag":200,"props":635,"children":636},{},[637],{"type":47,"value":638},"RUN echo \"deb-src http:\u002F\u002Fapt.llvm.org\u002Fbookworm\u002F llvm-toolchain-bookworm-$LLVM_VERSION main\" >> \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fllvm.list\n",{"type":42,"tag":200,"props":640,"children":642},{"class":202,"line":641},19,[643],{"type":42,"tag":200,"props":644,"children":645},{},[646],{"type":47,"value":647},"RUN wget -qO- https:\u002F\u002Fapt.llvm.org\u002Fllvm-snapshot.gpg.key > \u002Fetc\u002Fapt\u002Ftrusted.gpg.d\u002Fapt.llvm.org.asc\n",{"type":42,"tag":200,"props":649,"children":651},{"class":202,"line":650},20,[652],{"type":42,"tag":200,"props":653,"children":654},{"emptyLinePlaceholder":225},[655],{"type":47,"value":228},{"type":42,"tag":200,"props":657,"children":659},{"class":202,"line":658},21,[660],{"type":42,"tag":200,"props":661,"children":662},{},[663],{"type":47,"value":560},{"type":42,"tag":200,"props":665,"children":667},{"class":202,"line":666},22,[668],{"type":42,"tag":200,"props":669,"children":670},{},[671],{"type":47,"value":672},"    build-essential \\\n",{"type":42,"tag":200,"props":674,"children":676},{"class":202,"line":675},23,[677],{"type":42,"tag":200,"props":678,"children":679},{},[680],{"type":47,"value":681},"    clang-$LLVM_VERSION \\\n",{"type":42,"tag":200,"props":683,"children":685},{"class":202,"line":684},24,[686],{"type":42,"tag":200,"props":687,"children":688},{},[689],{"type":47,"value":584},{"type":42,"tag":200,"props":691,"children":693},{"class":202,"line":692},25,[694],{"type":42,"tag":200,"props":695,"children":696},{"emptyLinePlaceholder":225},[697],{"type":47,"value":228},{"type":42,"tag":200,"props":699,"children":701},{"class":202,"line":700},26,[702],{"type":42,"tag":200,"props":703,"children":704},{},[705],{"type":47,"value":706},"ENV APP_DIR \"\u002Fapp\"\n",{"type":42,"tag":200,"props":708,"children":710},{"class":202,"line":709},27,[711],{"type":42,"tag":200,"props":712,"children":713},{},[714],{"type":47,"value":715},"RUN mkdir $APP_DIR\n",{"type":42,"tag":200,"props":717,"children":719},{"class":202,"line":718},28,[720],{"type":42,"tag":200,"props":721,"children":722},{},[723],{"type":47,"value":724},"WORKDIR $APP_DIR\n",{"type":42,"tag":200,"props":726,"children":728},{"class":202,"line":727},29,[729],{"type":42,"tag":200,"props":730,"children":731},{"emptyLinePlaceholder":225},[732],{"type":47,"value":228},{"type":42,"tag":200,"props":734,"children":736},{"class":202,"line":735},30,[737],{"type":42,"tag":200,"props":738,"children":739},{},[740],{"type":47,"value":741},"ENV VIRTUAL_ENV \"\u002Fopt\u002Fvenv\"\n",{"type":42,"tag":200,"props":743,"children":745},{"class":202,"line":744},31,[746],{"type":42,"tag":200,"props":747,"children":748},{},[749],{"type":47,"value":750},"RUN python -m venv $VIRTUAL_ENV\n",{"type":42,"tag":200,"props":752,"children":754},{"class":202,"line":753},32,[755],{"type":42,"tag":200,"props":756,"children":757},{},[758],{"type":47,"value":759},"ENV PATH \"$VIRTUAL_ENV\u002Fbin:$PATH\"\n",{"type":42,"tag":200,"props":761,"children":763},{"class":202,"line":762},33,[764],{"type":42,"tag":200,"props":765,"children":766},{"emptyLinePlaceholder":225},[767],{"type":47,"value":228},{"type":42,"tag":200,"props":769,"children":771},{"class":202,"line":770},34,[772],{"type":42,"tag":200,"props":773,"children":774},{},[775],{"type":47,"value":776},"# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#step-1-compiling-your-extension\n",{"type":42,"tag":200,"props":778,"children":780},{"class":202,"line":779},35,[781],{"type":42,"tag":200,"props":782,"children":783},{},[784],{"type":47,"value":785},"ENV CC=\"clang-$LLVM_VERSION\"\n",{"type":42,"tag":200,"props":787,"children":789},{"class":202,"line":788},36,[790],{"type":42,"tag":200,"props":791,"children":792},{},[793],{"type":47,"value":794},"ENV CFLAGS \"-fsanitize=address,fuzzer-no-link\"\n",{"type":42,"tag":200,"props":796,"children":798},{"class":202,"line":797},37,[799],{"type":42,"tag":200,"props":800,"children":801},{},[802],{"type":47,"value":803},"ENV CXX=\"clang++-$LLVM_VERSION\"\n",{"type":42,"tag":200,"props":805,"children":807},{"class":202,"line":806},38,[808],{"type":42,"tag":200,"props":809,"children":810},{},[811],{"type":47,"value":812},"ENV CXXFLAGS \"-fsanitize=address,fuzzer-no-link\"\n",{"type":42,"tag":200,"props":814,"children":816},{"class":202,"line":815},39,[817],{"type":42,"tag":200,"props":818,"children":819},{},[820],{"type":47,"value":821},"ENV LDSHARED=\"clang-$LLVM_VERSION -shared\"\n",{"type":42,"tag":200,"props":823,"children":825},{"class":202,"line":824},40,[826],{"type":42,"tag":200,"props":827,"children":828},{},[829],{"type":47,"value":830},"ENV LDSHAREDXX=\"clang++-$LLVM_VERSION -shared\"\n",{"type":42,"tag":200,"props":832,"children":834},{"class":202,"line":833},41,[835],{"type":42,"tag":200,"props":836,"children":837},{},[838],{"type":47,"value":839},"ENV ASAN_SYMBOLIZER_PATH=\"\u002Fusr\u002Fbin\u002Fllvm-symbolizer-$LLVM_VERSION\"\n",{"type":42,"tag":200,"props":841,"children":843},{"class":202,"line":842},42,[844],{"type":42,"tag":200,"props":845,"children":846},{"emptyLinePlaceholder":225},[847],{"type":47,"value":228},{"type":42,"tag":200,"props":849,"children":851},{"class":202,"line":850},43,[852],{"type":42,"tag":200,"props":853,"children":854},{},[855],{"type":47,"value":856},"# Allow Atheris to find fuzzer sanitizer shared libs\n",{"type":42,"tag":200,"props":858,"children":860},{"class":202,"line":859},44,[861],{"type":42,"tag":200,"props":862,"children":863},{},[864],{"type":47,"value":865},"# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris#building-from-source\n",{"type":42,"tag":200,"props":867,"children":869},{"class":202,"line":868},45,[870],{"type":42,"tag":200,"props":871,"children":872},{},[873],{"type":47,"value":874},"RUN LIBFUZZER_LIB=$($CC -print-file-name=libclang_rt.fuzzer_no_main-$(uname -m).a) \\\n",{"type":42,"tag":200,"props":876,"children":878},{"class":202,"line":877},46,[879],{"type":42,"tag":200,"props":880,"children":881},{},[882],{"type":47,"value":883},"    python -m pip install --no-binary atheris atheris\n",{"type":42,"tag":200,"props":885,"children":887},{"class":202,"line":886},47,[888],{"type":42,"tag":200,"props":889,"children":890},{"emptyLinePlaceholder":225},[891],{"type":47,"value":228},{"type":42,"tag":200,"props":893,"children":895},{"class":202,"line":894},48,[896],{"type":42,"tag":200,"props":897,"children":898},{},[899],{"type":47,"value":900},"# https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#option-a-sanitizerlibfuzzer-preloads\n",{"type":42,"tag":200,"props":902,"children":904},{"class":202,"line":903},49,[905],{"type":42,"tag":200,"props":906,"children":907},{},[908],{"type":47,"value":909},"ENV LD_PRELOAD \"$VIRTUAL_ENV\u002Flib\u002Fpython3.11\u002Fsite-packages\u002Fasan_with_fuzzer.so\"\n",{"type":42,"tag":200,"props":911,"children":913},{"class":202,"line":912},50,[914],{"type":42,"tag":200,"props":915,"children":916},{"emptyLinePlaceholder":225},[917],{"type":47,"value":228},{"type":42,"tag":200,"props":919,"children":921},{"class":202,"line":920},51,[922],{"type":42,"tag":200,"props":923,"children":924},{},[925],{"type":47,"value":926},"# 1. Skip memory allocation failures for now, they are common, and low impact (DoS)\n",{"type":42,"tag":200,"props":928,"children":930},{"class":202,"line":929},52,[931],{"type":42,"tag":200,"props":932,"children":933},{},[934],{"type":47,"value":935},"# 2. https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#leak-detection\n",{"type":42,"tag":200,"props":937,"children":939},{"class":202,"line":938},53,[940],{"type":42,"tag":200,"props":941,"children":942},{},[943],{"type":47,"value":944},"ENV ASAN_OPTIONS \"allocator_may_return_null=1,detect_leaks=0\"\n",{"type":42,"tag":200,"props":946,"children":948},{"class":202,"line":947},54,[949],{"type":42,"tag":200,"props":950,"children":951},{"emptyLinePlaceholder":225},[952],{"type":47,"value":228},{"type":42,"tag":200,"props":954,"children":956},{"class":202,"line":955},55,[957],{"type":42,"tag":200,"props":958,"children":959},{},[960],{"type":47,"value":961},"CMD [\"\u002Fbin\u002Fbash\"]\n",{"type":42,"tag":50,"props":963,"children":964},{},[965],{"type":47,"value":966},"Build and run:",{"type":42,"tag":189,"props":968,"children":970},{"className":369,"code":969,"language":371,"meta":193,"style":193},"docker build -t atheris .\ndocker run -it atheris\n",[971],{"type":42,"tag":196,"props":972,"children":973},{"__ignoreMap":193},[974,1002],{"type":42,"tag":200,"props":975,"children":976},{"class":202,"line":203},[977,982,987,992,997],{"type":42,"tag":200,"props":978,"children":979},{"style":381},[980],{"type":47,"value":981},"docker",{"type":42,"tag":200,"props":983,"children":984},{"style":386},[985],{"type":47,"value":986}," build",{"type":42,"tag":200,"props":988,"children":989},{"style":386},[990],{"type":47,"value":991}," -t",{"type":42,"tag":200,"props":993,"children":994},{"style":386},[995],{"type":47,"value":996}," atheris",{"type":42,"tag":200,"props":998,"children":999},{"style":386},[1000],{"type":47,"value":1001}," .\n",{"type":42,"tag":200,"props":1003,"children":1004},{"class":202,"line":212},[1005,1009,1014,1019],{"type":42,"tag":200,"props":1006,"children":1007},{"style":381},[1008],{"type":47,"value":981},{"type":42,"tag":200,"props":1010,"children":1011},{"style":386},[1012],{"type":47,"value":1013}," run",{"type":42,"tag":200,"props":1015,"children":1016},{"style":386},[1017],{"type":47,"value":1018}," -it",{"type":42,"tag":200,"props":1020,"children":1021},{"style":386},[1022],{"type":47,"value":479},{"type":42,"tag":402,"props":1024,"children":1026},{"id":1025},"verification",[1027],{"type":47,"value":1028},"Verification",{"type":42,"tag":189,"props":1030,"children":1032},{"className":369,"code":1031,"language":371,"meta":193,"style":193},"python -c \"import atheris; print(atheris.__version__)\"\n",[1033],{"type":42,"tag":196,"props":1034,"children":1035},{"__ignoreMap":193},[1036],{"type":42,"tag":200,"props":1037,"children":1038},{"class":202,"line":203},[1039,1043,1048,1054,1059],{"type":42,"tag":200,"props":1040,"children":1041},{"style":381},[1042],{"type":47,"value":19},{"type":42,"tag":200,"props":1044,"children":1045},{"style":386},[1046],{"type":47,"value":1047}," -c",{"type":42,"tag":200,"props":1049,"children":1051},{"style":1050},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1052],{"type":47,"value":1053}," \"",{"type":42,"tag":200,"props":1055,"children":1056},{"style":386},[1057],{"type":47,"value":1058},"import atheris; print(atheris.__version__)",{"type":42,"tag":200,"props":1060,"children":1061},{"style":1050},[1062],{"type":47,"value":1063},"\"\n",{"type":42,"tag":56,"props":1065,"children":1067},{"id":1066},"writing-a-harness",[1068],{"type":47,"value":1069},"Writing a Harness",{"type":42,"tag":402,"props":1071,"children":1073},{"id":1072},"harness-structure-for-pure-python",[1074],{"type":47,"value":1075},"Harness Structure for Pure Python",{"type":42,"tag":189,"props":1077,"children":1079},{"className":191,"code":1078,"language":19,"meta":193,"style":193},"import sys\nimport atheris\n\n@atheris.instrument_func\ndef test_one_input(data: bytes):\n    \"\"\"\n    Fuzzing entry point. Called with random byte sequences.\n\n    Args:\n        data: Random bytes generated by the fuzzer\n    \"\"\"\n    # Add input validation if needed\n    if len(data) \u003C 1:\n        return\n\n    # Call your target function\n    try:\n        your_target_function(data)\n    except ValueError:\n        # Expected exceptions should be caught\n        pass\n    # Let unexpected exceptions crash (that's what we're looking for!)\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n",[1080],{"type":42,"tag":196,"props":1081,"children":1082},{"__ignoreMap":193},[1083,1090,1097,1104,1111,1118,1126,1134,1141,1149,1157,1164,1172,1180,1188,1195,1203,1211,1219,1227,1235,1243,1251,1258,1265,1272,1279,1286,1293],{"type":42,"tag":200,"props":1084,"children":1085},{"class":202,"line":203},[1086],{"type":42,"tag":200,"props":1087,"children":1088},{},[1089],{"type":47,"value":209},{"type":42,"tag":200,"props":1091,"children":1092},{"class":202,"line":212},[1093],{"type":42,"tag":200,"props":1094,"children":1095},{},[1096],{"type":47,"value":218},{"type":42,"tag":200,"props":1098,"children":1099},{"class":202,"line":221},[1100],{"type":42,"tag":200,"props":1101,"children":1102},{"emptyLinePlaceholder":225},[1103],{"type":47,"value":228},{"type":42,"tag":200,"props":1105,"children":1106},{"class":202,"line":231},[1107],{"type":42,"tag":200,"props":1108,"children":1109},{},[1110],{"type":47,"value":237},{"type":42,"tag":200,"props":1112,"children":1113},{"class":202,"line":240},[1114],{"type":42,"tag":200,"props":1115,"children":1116},{},[1117],{"type":47,"value":246},{"type":42,"tag":200,"props":1119,"children":1120},{"class":202,"line":249},[1121],{"type":42,"tag":200,"props":1122,"children":1123},{},[1124],{"type":47,"value":1125},"    \"\"\"\n",{"type":42,"tag":200,"props":1127,"children":1128},{"class":202,"line":258},[1129],{"type":42,"tag":200,"props":1130,"children":1131},{},[1132],{"type":47,"value":1133},"    Fuzzing entry point. Called with random byte sequences.\n",{"type":42,"tag":200,"props":1135,"children":1136},{"class":202,"line":267},[1137],{"type":42,"tag":200,"props":1138,"children":1139},{"emptyLinePlaceholder":225},[1140],{"type":47,"value":228},{"type":42,"tag":200,"props":1142,"children":1143},{"class":202,"line":276},[1144],{"type":42,"tag":200,"props":1145,"children":1146},{},[1147],{"type":47,"value":1148},"    Args:\n",{"type":42,"tag":200,"props":1150,"children":1151},{"class":202,"line":285},[1152],{"type":42,"tag":200,"props":1153,"children":1154},{},[1155],{"type":47,"value":1156},"        data: Random bytes generated by the fuzzer\n",{"type":42,"tag":200,"props":1158,"children":1159},{"class":202,"line":294},[1160],{"type":42,"tag":200,"props":1161,"children":1162},{},[1163],{"type":47,"value":1125},{"type":42,"tag":200,"props":1165,"children":1166},{"class":202,"line":303},[1167],{"type":42,"tag":200,"props":1168,"children":1169},{},[1170],{"type":47,"value":1171},"    # Add input validation if needed\n",{"type":42,"tag":200,"props":1173,"children":1174},{"class":202,"line":311},[1175],{"type":42,"tag":200,"props":1176,"children":1177},{},[1178],{"type":47,"value":1179},"    if len(data) \u003C 1:\n",{"type":42,"tag":200,"props":1181,"children":1182},{"class":202,"line":320},[1183],{"type":42,"tag":200,"props":1184,"children":1185},{},[1186],{"type":47,"value":1187},"        return\n",{"type":42,"tag":200,"props":1189,"children":1190},{"class":202,"line":329},[1191],{"type":42,"tag":200,"props":1192,"children":1193},{"emptyLinePlaceholder":225},[1194],{"type":47,"value":228},{"type":42,"tag":200,"props":1196,"children":1197},{"class":202,"line":338},[1198],{"type":42,"tag":200,"props":1199,"children":1200},{},[1201],{"type":47,"value":1202},"    # Call your target function\n",{"type":42,"tag":200,"props":1204,"children":1205},{"class":202,"line":346},[1206],{"type":42,"tag":200,"props":1207,"children":1208},{},[1209],{"type":47,"value":1210},"    try:\n",{"type":42,"tag":200,"props":1212,"children":1213},{"class":202,"line":355},[1214],{"type":42,"tag":200,"props":1215,"children":1216},{},[1217],{"type":47,"value":1218},"        your_target_function(data)\n",{"type":42,"tag":200,"props":1220,"children":1221},{"class":202,"line":641},[1222],{"type":42,"tag":200,"props":1223,"children":1224},{},[1225],{"type":47,"value":1226},"    except ValueError:\n",{"type":42,"tag":200,"props":1228,"children":1229},{"class":202,"line":650},[1230],{"type":42,"tag":200,"props":1231,"children":1232},{},[1233],{"type":47,"value":1234},"        # Expected exceptions should be caught\n",{"type":42,"tag":200,"props":1236,"children":1237},{"class":202,"line":658},[1238],{"type":42,"tag":200,"props":1239,"children":1240},{},[1241],{"type":47,"value":1242},"        pass\n",{"type":42,"tag":200,"props":1244,"children":1245},{"class":202,"line":666},[1246],{"type":42,"tag":200,"props":1247,"children":1248},{},[1249],{"type":47,"value":1250},"    # Let unexpected exceptions crash (that's what we're looking for!)\n",{"type":42,"tag":200,"props":1252,"children":1253},{"class":202,"line":675},[1254],{"type":42,"tag":200,"props":1255,"children":1256},{"emptyLinePlaceholder":225},[1257],{"type":47,"value":228},{"type":42,"tag":200,"props":1259,"children":1260},{"class":202,"line":684},[1261],{"type":42,"tag":200,"props":1262,"children":1263},{},[1264],{"type":47,"value":317},{"type":42,"tag":200,"props":1266,"children":1267},{"class":202,"line":692},[1268],{"type":42,"tag":200,"props":1269,"children":1270},{},[1271],{"type":47,"value":326},{"type":42,"tag":200,"props":1273,"children":1274},{"class":202,"line":700},[1275],{"type":42,"tag":200,"props":1276,"children":1277},{},[1278],{"type":47,"value":335},{"type":42,"tag":200,"props":1280,"children":1281},{"class":202,"line":709},[1282],{"type":42,"tag":200,"props":1283,"children":1284},{"emptyLinePlaceholder":225},[1285],{"type":47,"value":228},{"type":42,"tag":200,"props":1287,"children":1288},{"class":202,"line":718},[1289],{"type":42,"tag":200,"props":1290,"children":1291},{},[1292],{"type":47,"value":352},{"type":42,"tag":200,"props":1294,"children":1295},{"class":202,"line":727},[1296],{"type":42,"tag":200,"props":1297,"children":1298},{},[1299],{"type":47,"value":361},{"type":42,"tag":402,"props":1301,"children":1303},{"id":1302},"harness-rules",[1304],{"type":47,"value":1305},"Harness Rules",{"type":42,"tag":63,"props":1307,"children":1308},{},[1309,1325],{"type":42,"tag":67,"props":1310,"children":1311},{},[1312],{"type":42,"tag":71,"props":1313,"children":1314},{},[1315,1320],{"type":42,"tag":75,"props":1316,"children":1317},{},[1318],{"type":47,"value":1319},"Do",{"type":42,"tag":75,"props":1321,"children":1322},{},[1323],{"type":47,"value":1324},"Don't",{"type":42,"tag":91,"props":1326,"children":1327},{},[1328,1349,1362,1388],{"type":42,"tag":71,"props":1329,"children":1330},{},[1331,1344],{"type":42,"tag":98,"props":1332,"children":1333},{},[1334,1336,1342],{"type":47,"value":1335},"Use ",{"type":42,"tag":196,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":47,"value":1341},"@atheris.instrument_func",{"type":47,"value":1343}," for coverage",{"type":42,"tag":98,"props":1345,"children":1346},{},[1347],{"type":47,"value":1348},"Forget to instrument target code",{"type":42,"tag":71,"props":1350,"children":1351},{},[1352,1357],{"type":42,"tag":98,"props":1353,"children":1354},{},[1355],{"type":47,"value":1356},"Catch expected exceptions",{"type":42,"tag":98,"props":1358,"children":1359},{},[1360],{"type":47,"value":1361},"Catch all exceptions indiscriminately",{"type":42,"tag":71,"props":1363,"children":1364},{},[1365,1377],{"type":42,"tag":98,"props":1366,"children":1367},{},[1368,1369,1375],{"type":47,"value":1335},{"type":42,"tag":196,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":47,"value":1374},"atheris.instrument_imports()",{"type":47,"value":1376}," for libraries",{"type":42,"tag":98,"props":1378,"children":1379},{},[1380,1382],{"type":47,"value":1381},"Import modules after ",{"type":42,"tag":196,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":47,"value":1387},"atheris.Setup()",{"type":42,"tag":71,"props":1389,"children":1390},{},[1391,1396],{"type":42,"tag":98,"props":1392,"children":1393},{},[1394],{"type":47,"value":1395},"Keep harness deterministic",{"type":42,"tag":98,"props":1397,"children":1398},{},[1399],{"type":47,"value":1400},"Use randomness or time-based behavior",{"type":42,"tag":1402,"props":1403,"children":1404},"blockquote",{},[1405],{"type":42,"tag":50,"props":1406,"children":1407},{},[1408,1413,1415,1420],{"type":42,"tag":152,"props":1409,"children":1410},{},[1411],{"type":47,"value":1412},"See Also:",{"type":47,"value":1414}," For detailed harness writing techniques, patterns for handling complex inputs,\nand advanced strategies, see the ",{"type":42,"tag":152,"props":1416,"children":1417},{},[1418],{"type":47,"value":1419},"fuzz-harness-writing",{"type":47,"value":1421}," technique skill.",{"type":42,"tag":56,"props":1423,"children":1425},{"id":1424},"fuzzing-pure-python-code",[1426],{"type":47,"value":1427},"Fuzzing Pure Python Code",{"type":42,"tag":50,"props":1429,"children":1430},{},[1431],{"type":47,"value":1432},"For fuzzing broader parts of an application or library, use instrumentation functions:",{"type":42,"tag":189,"props":1434,"children":1436},{"className":191,"code":1435,"language":19,"meta":193,"style":193},"import atheris\nwith atheris.instrument_imports():\n    import your_module\n    from another_module import target_function\n\ndef test_one_input(data: bytes):\n    target_function(data)\n\natheris.Setup(sys.argv, test_one_input)\natheris.Fuzz()\n",[1437],{"type":42,"tag":196,"props":1438,"children":1439},{"__ignoreMap":193},[1440,1447,1455,1463,1471,1478,1485,1493,1500,1508],{"type":42,"tag":200,"props":1441,"children":1442},{"class":202,"line":203},[1443],{"type":42,"tag":200,"props":1444,"children":1445},{},[1446],{"type":47,"value":218},{"type":42,"tag":200,"props":1448,"children":1449},{"class":202,"line":212},[1450],{"type":42,"tag":200,"props":1451,"children":1452},{},[1453],{"type":47,"value":1454},"with atheris.instrument_imports():\n",{"type":42,"tag":200,"props":1456,"children":1457},{"class":202,"line":221},[1458],{"type":42,"tag":200,"props":1459,"children":1460},{},[1461],{"type":47,"value":1462},"    import your_module\n",{"type":42,"tag":200,"props":1464,"children":1465},{"class":202,"line":231},[1466],{"type":42,"tag":200,"props":1467,"children":1468},{},[1469],{"type":47,"value":1470},"    from another_module import target_function\n",{"type":42,"tag":200,"props":1472,"children":1473},{"class":202,"line":240},[1474],{"type":42,"tag":200,"props":1475,"children":1476},{"emptyLinePlaceholder":225},[1477],{"type":47,"value":228},{"type":42,"tag":200,"props":1479,"children":1480},{"class":202,"line":249},[1481],{"type":42,"tag":200,"props":1482,"children":1483},{},[1484],{"type":47,"value":246},{"type":42,"tag":200,"props":1486,"children":1487},{"class":202,"line":258},[1488],{"type":42,"tag":200,"props":1489,"children":1490},{},[1491],{"type":47,"value":1492},"    target_function(data)\n",{"type":42,"tag":200,"props":1494,"children":1495},{"class":202,"line":267},[1496],{"type":42,"tag":200,"props":1497,"children":1498},{"emptyLinePlaceholder":225},[1499],{"type":47,"value":228},{"type":42,"tag":200,"props":1501,"children":1502},{"class":202,"line":276},[1503],{"type":42,"tag":200,"props":1504,"children":1505},{},[1506],{"type":47,"value":1507},"atheris.Setup(sys.argv, test_one_input)\n",{"type":42,"tag":200,"props":1509,"children":1510},{"class":202,"line":285},[1511],{"type":42,"tag":200,"props":1512,"children":1513},{},[1514],{"type":47,"value":1515},"atheris.Fuzz()\n",{"type":42,"tag":50,"props":1517,"children":1518},{},[1519],{"type":42,"tag":152,"props":1520,"children":1521},{},[1522],{"type":47,"value":1523},"Instrumentation Options:",{"type":42,"tag":158,"props":1525,"children":1526},{},[1527,1538,1548],{"type":42,"tag":162,"props":1528,"children":1529},{},[1530,1536],{"type":42,"tag":196,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":47,"value":1535},"atheris.instrument_func",{"type":47,"value":1537}," - Decorator for single function instrumentation",{"type":42,"tag":162,"props":1539,"children":1540},{},[1541,1546],{"type":42,"tag":196,"props":1542,"children":1544},{"className":1543},[],[1545],{"type":47,"value":1374},{"type":47,"value":1547}," - Context manager for instrumenting all imported modules",{"type":42,"tag":162,"props":1549,"children":1550},{},[1551,1557],{"type":42,"tag":196,"props":1552,"children":1554},{"className":1553},[],[1555],{"type":47,"value":1556},"atheris.instrument_all()",{"type":47,"value":1558}," - Instrument all Python code system-wide",{"type":42,"tag":56,"props":1560,"children":1562},{"id":1561},"fuzzing-python-c-extensions",[1563],{"type":47,"value":1564},"Fuzzing Python C Extensions",{"type":42,"tag":50,"props":1566,"children":1567},{},[1568],{"type":47,"value":1569},"Python C extensions require compilation with specific flags for instrumentation and sanitizer support.",{"type":42,"tag":402,"props":1571,"children":1573},{"id":1572},"environment-configuration",[1574],{"type":47,"value":1575},"Environment Configuration",{"type":42,"tag":50,"props":1577,"children":1578},{},[1579],{"type":47,"value":1580},"If using the provided Dockerfile, these are already configured. For local setup:",{"type":42,"tag":189,"props":1582,"children":1584},{"className":369,"code":1583,"language":371,"meta":193,"style":193},"export CC=\"clang\"\nexport CFLAGS=\"-fsanitize=address,fuzzer-no-link\"\nexport CXX=\"clang++\"\nexport CXXFLAGS=\"-fsanitize=address,fuzzer-no-link\"\nexport LDSHARED=\"clang -shared\"\n",[1585],{"type":42,"tag":196,"props":1586,"children":1587},{"__ignoreMap":193},[1588,1622,1651,1680,1708],{"type":42,"tag":200,"props":1589,"children":1590},{"class":202,"line":203},[1591,1597,1603,1608,1613,1618],{"type":42,"tag":200,"props":1592,"children":1594},{"style":1593},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1595],{"type":47,"value":1596},"export",{"type":42,"tag":200,"props":1598,"children":1600},{"style":1599},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1601],{"type":47,"value":1602}," CC",{"type":42,"tag":200,"props":1604,"children":1605},{"style":1050},[1606],{"type":47,"value":1607},"=",{"type":42,"tag":200,"props":1609,"children":1610},{"style":1050},[1611],{"type":47,"value":1612},"\"",{"type":42,"tag":200,"props":1614,"children":1615},{"style":386},[1616],{"type":47,"value":1617},"clang",{"type":42,"tag":200,"props":1619,"children":1620},{"style":1050},[1621],{"type":47,"value":1063},{"type":42,"tag":200,"props":1623,"children":1624},{"class":202,"line":212},[1625,1629,1634,1638,1642,1647],{"type":42,"tag":200,"props":1626,"children":1627},{"style":1593},[1628],{"type":47,"value":1596},{"type":42,"tag":200,"props":1630,"children":1631},{"style":1599},[1632],{"type":47,"value":1633}," CFLAGS",{"type":42,"tag":200,"props":1635,"children":1636},{"style":1050},[1637],{"type":47,"value":1607},{"type":42,"tag":200,"props":1639,"children":1640},{"style":1050},[1641],{"type":47,"value":1612},{"type":42,"tag":200,"props":1643,"children":1644},{"style":386},[1645],{"type":47,"value":1646},"-fsanitize=address,fuzzer-no-link",{"type":42,"tag":200,"props":1648,"children":1649},{"style":1050},[1650],{"type":47,"value":1063},{"type":42,"tag":200,"props":1652,"children":1653},{"class":202,"line":221},[1654,1658,1663,1667,1671,1676],{"type":42,"tag":200,"props":1655,"children":1656},{"style":1593},[1657],{"type":47,"value":1596},{"type":42,"tag":200,"props":1659,"children":1660},{"style":1599},[1661],{"type":47,"value":1662}," CXX",{"type":42,"tag":200,"props":1664,"children":1665},{"style":1050},[1666],{"type":47,"value":1607},{"type":42,"tag":200,"props":1668,"children":1669},{"style":1050},[1670],{"type":47,"value":1612},{"type":42,"tag":200,"props":1672,"children":1673},{"style":386},[1674],{"type":47,"value":1675},"clang++",{"type":42,"tag":200,"props":1677,"children":1678},{"style":1050},[1679],{"type":47,"value":1063},{"type":42,"tag":200,"props":1681,"children":1682},{"class":202,"line":231},[1683,1687,1692,1696,1700,1704],{"type":42,"tag":200,"props":1684,"children":1685},{"style":1593},[1686],{"type":47,"value":1596},{"type":42,"tag":200,"props":1688,"children":1689},{"style":1599},[1690],{"type":47,"value":1691}," CXXFLAGS",{"type":42,"tag":200,"props":1693,"children":1694},{"style":1050},[1695],{"type":47,"value":1607},{"type":42,"tag":200,"props":1697,"children":1698},{"style":1050},[1699],{"type":47,"value":1612},{"type":42,"tag":200,"props":1701,"children":1702},{"style":386},[1703],{"type":47,"value":1646},{"type":42,"tag":200,"props":1705,"children":1706},{"style":1050},[1707],{"type":47,"value":1063},{"type":42,"tag":200,"props":1709,"children":1710},{"class":202,"line":240},[1711,1715,1720,1724,1728,1733],{"type":42,"tag":200,"props":1712,"children":1713},{"style":1593},[1714],{"type":47,"value":1596},{"type":42,"tag":200,"props":1716,"children":1717},{"style":1599},[1718],{"type":47,"value":1719}," LDSHARED",{"type":42,"tag":200,"props":1721,"children":1722},{"style":1050},[1723],{"type":47,"value":1607},{"type":42,"tag":200,"props":1725,"children":1726},{"style":1050},[1727],{"type":47,"value":1612},{"type":42,"tag":200,"props":1729,"children":1730},{"style":386},[1731],{"type":47,"value":1732},"clang -shared",{"type":42,"tag":200,"props":1734,"children":1735},{"style":1050},[1736],{"type":47,"value":1063},{"type":42,"tag":402,"props":1738,"children":1740},{"id":1739},"example-fuzzing-cbor2",[1741],{"type":47,"value":1742},"Example: Fuzzing cbor2",{"type":42,"tag":50,"props":1744,"children":1745},{},[1746],{"type":47,"value":1747},"Install the extension from source:",{"type":42,"tag":189,"props":1749,"children":1751},{"className":369,"code":1750,"language":371,"meta":193,"style":193},"CBOR2_BUILD_C_EXTENSION=1 python -m pip install --no-binary cbor2 cbor2==5.6.4\n",[1752],{"type":42,"tag":196,"props":1753,"children":1754},{"__ignoreMap":193},[1755],{"type":42,"tag":200,"props":1756,"children":1757},{"class":202,"line":203},[1758,1763,1767,1772,1777,1782,1786,1790,1795,1800,1805],{"type":42,"tag":200,"props":1759,"children":1760},{"style":1599},[1761],{"type":47,"value":1762},"CBOR2_BUILD_C_EXTENSION",{"type":42,"tag":200,"props":1764,"children":1765},{"style":1050},[1766],{"type":47,"value":1607},{"type":42,"tag":200,"props":1768,"children":1769},{"style":386},[1770],{"type":47,"value":1771},"1",{"type":42,"tag":200,"props":1773,"children":1774},{"style":381},[1775],{"type":47,"value":1776}," python",{"type":42,"tag":200,"props":1778,"children":1779},{"style":386},[1780],{"type":47,"value":1781}," -m",{"type":42,"tag":200,"props":1783,"children":1784},{"style":386},[1785],{"type":47,"value":469},{"type":42,"tag":200,"props":1787,"children":1788},{"style":386},[1789],{"type":47,"value":474},{"type":42,"tag":200,"props":1791,"children":1792},{"style":386},[1793],{"type":47,"value":1794}," --no-binary",{"type":42,"tag":200,"props":1796,"children":1797},{"style":386},[1798],{"type":47,"value":1799}," cbor2",{"type":42,"tag":200,"props":1801,"children":1802},{"style":386},[1803],{"type":47,"value":1804}," cbor2==",{"type":42,"tag":200,"props":1806,"children":1808},{"style":1807},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1809],{"type":47,"value":1810},"5.6.4\n",{"type":42,"tag":50,"props":1812,"children":1813},{},[1814,1816,1822],{"type":47,"value":1815},"The ",{"type":42,"tag":196,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":47,"value":1821},"--no-binary",{"type":47,"value":1823}," flag ensures the C extension is compiled locally with instrumentation.",{"type":42,"tag":50,"props":1825,"children":1826},{},[1827,1829,1835],{"type":47,"value":1828},"Create ",{"type":42,"tag":196,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":47,"value":1834},"cbor2-fuzz.py",{"type":47,"value":1836},":",{"type":42,"tag":189,"props":1838,"children":1840},{"className":191,"code":1839,"language":19,"meta":193,"style":193},"import sys\nimport atheris\n\n# _cbor2 ensures the C library is imported\nfrom _cbor2 import loads\n\ndef test_one_input(data: bytes):\n    try:\n        loads(data)\n    except Exception:\n        # We're searching for memory corruption, not Python exceptions\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n",[1841],{"type":42,"tag":196,"props":1842,"children":1843},{"__ignoreMap":193},[1844,1851,1858,1865,1873,1881,1888,1895,1902,1910,1918,1926,1933,1940,1947,1954,1961,1968,1975],{"type":42,"tag":200,"props":1845,"children":1846},{"class":202,"line":203},[1847],{"type":42,"tag":200,"props":1848,"children":1849},{},[1850],{"type":47,"value":209},{"type":42,"tag":200,"props":1852,"children":1853},{"class":202,"line":212},[1854],{"type":42,"tag":200,"props":1855,"children":1856},{},[1857],{"type":47,"value":218},{"type":42,"tag":200,"props":1859,"children":1860},{"class":202,"line":221},[1861],{"type":42,"tag":200,"props":1862,"children":1863},{"emptyLinePlaceholder":225},[1864],{"type":47,"value":228},{"type":42,"tag":200,"props":1866,"children":1867},{"class":202,"line":231},[1868],{"type":42,"tag":200,"props":1869,"children":1870},{},[1871],{"type":47,"value":1872},"# _cbor2 ensures the C library is imported\n",{"type":42,"tag":200,"props":1874,"children":1875},{"class":202,"line":240},[1876],{"type":42,"tag":200,"props":1877,"children":1878},{},[1879],{"type":47,"value":1880},"from _cbor2 import loads\n",{"type":42,"tag":200,"props":1882,"children":1883},{"class":202,"line":249},[1884],{"type":42,"tag":200,"props":1885,"children":1886},{"emptyLinePlaceholder":225},[1887],{"type":47,"value":228},{"type":42,"tag":200,"props":1889,"children":1890},{"class":202,"line":258},[1891],{"type":42,"tag":200,"props":1892,"children":1893},{},[1894],{"type":47,"value":246},{"type":42,"tag":200,"props":1896,"children":1897},{"class":202,"line":267},[1898],{"type":42,"tag":200,"props":1899,"children":1900},{},[1901],{"type":47,"value":1210},{"type":42,"tag":200,"props":1903,"children":1904},{"class":202,"line":276},[1905],{"type":42,"tag":200,"props":1906,"children":1907},{},[1908],{"type":47,"value":1909},"        loads(data)\n",{"type":42,"tag":200,"props":1911,"children":1912},{"class":202,"line":285},[1913],{"type":42,"tag":200,"props":1914,"children":1915},{},[1916],{"type":47,"value":1917},"    except Exception:\n",{"type":42,"tag":200,"props":1919,"children":1920},{"class":202,"line":294},[1921],{"type":42,"tag":200,"props":1922,"children":1923},{},[1924],{"type":47,"value":1925},"        # We're searching for memory corruption, not Python exceptions\n",{"type":42,"tag":200,"props":1927,"children":1928},{"class":202,"line":303},[1929],{"type":42,"tag":200,"props":1930,"children":1931},{},[1932],{"type":47,"value":1242},{"type":42,"tag":200,"props":1934,"children":1935},{"class":202,"line":311},[1936],{"type":42,"tag":200,"props":1937,"children":1938},{"emptyLinePlaceholder":225},[1939],{"type":47,"value":228},{"type":42,"tag":200,"props":1941,"children":1942},{"class":202,"line":320},[1943],{"type":42,"tag":200,"props":1944,"children":1945},{},[1946],{"type":47,"value":317},{"type":42,"tag":200,"props":1948,"children":1949},{"class":202,"line":329},[1950],{"type":42,"tag":200,"props":1951,"children":1952},{},[1953],{"type":47,"value":326},{"type":42,"tag":200,"props":1955,"children":1956},{"class":202,"line":338},[1957],{"type":42,"tag":200,"props":1958,"children":1959},{},[1960],{"type":47,"value":335},{"type":42,"tag":200,"props":1962,"children":1963},{"class":202,"line":346},[1964],{"type":42,"tag":200,"props":1965,"children":1966},{"emptyLinePlaceholder":225},[1967],{"type":47,"value":228},{"type":42,"tag":200,"props":1969,"children":1970},{"class":202,"line":355},[1971],{"type":42,"tag":200,"props":1972,"children":1973},{},[1974],{"type":47,"value":352},{"type":42,"tag":200,"props":1976,"children":1977},{"class":202,"line":641},[1978],{"type":42,"tag":200,"props":1979,"children":1980},{},[1981],{"type":47,"value":361},{"type":42,"tag":50,"props":1983,"children":1984},{},[1985],{"type":47,"value":366},{"type":42,"tag":189,"props":1987,"children":1989},{"className":369,"code":1988,"language":371,"meta":193,"style":193},"python cbor2-fuzz.py\n",[1990],{"type":42,"tag":196,"props":1991,"children":1992},{"__ignoreMap":193},[1993],{"type":42,"tag":200,"props":1994,"children":1995},{"class":202,"line":203},[1996,2000],{"type":42,"tag":200,"props":1997,"children":1998},{"style":381},[1999],{"type":47,"value":19},{"type":42,"tag":200,"props":2001,"children":2002},{"style":386},[2003],{"type":47,"value":2004}," cbor2-fuzz.py\n",{"type":42,"tag":1402,"props":2006,"children":2007},{},[2008],{"type":42,"tag":50,"props":2009,"children":2010},{},[2011,2016,2018,2033],{"type":42,"tag":152,"props":2012,"children":2013},{},[2014],{"type":47,"value":2015},"Important:",{"type":47,"value":2017}," When running locally (not in Docker), you must ",{"type":42,"tag":422,"props":2019,"children":2022},{"href":2020,"rel":2021},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md#option-a-sanitizerlibfuzzer-preloads",[426],[2023,2025,2031],{"type":47,"value":2024},"set ",{"type":42,"tag":196,"props":2026,"children":2028},{"className":2027},[],[2029],{"type":47,"value":2030},"LD_PRELOAD",{"type":47,"value":2032}," manually",{"type":47,"value":2034},".",{"type":42,"tag":56,"props":2036,"children":2038},{"id":2037},"corpus-management",[2039],{"type":47,"value":2040},"Corpus Management",{"type":42,"tag":402,"props":2042,"children":2044},{"id":2043},"creating-initial-corpus",[2045],{"type":47,"value":2046},"Creating Initial Corpus",{"type":42,"tag":189,"props":2048,"children":2050},{"className":369,"code":2049,"language":371,"meta":193,"style":193},"mkdir corpus\n# Add seed inputs\necho \"test data\" > corpus\u002Fseed1\necho '{\"key\": \"value\"}' > corpus\u002Fseed2\n",[2051],{"type":42,"tag":196,"props":2052,"children":2053},{"__ignoreMap":193},[2054,2067,2076,2108],{"type":42,"tag":200,"props":2055,"children":2056},{"class":202,"line":203},[2057,2062],{"type":42,"tag":200,"props":2058,"children":2059},{"style":381},[2060],{"type":47,"value":2061},"mkdir",{"type":42,"tag":200,"props":2063,"children":2064},{"style":386},[2065],{"type":47,"value":2066}," corpus\n",{"type":42,"tag":200,"props":2068,"children":2069},{"class":202,"line":212},[2070],{"type":42,"tag":200,"props":2071,"children":2073},{"style":2072},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[2074],{"type":47,"value":2075},"# Add seed inputs\n",{"type":42,"tag":200,"props":2077,"children":2078},{"class":202,"line":221},[2079,2085,2089,2094,2098,2103],{"type":42,"tag":200,"props":2080,"children":2082},{"style":2081},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[2083],{"type":47,"value":2084},"echo",{"type":42,"tag":200,"props":2086,"children":2087},{"style":1050},[2088],{"type":47,"value":1053},{"type":42,"tag":200,"props":2090,"children":2091},{"style":386},[2092],{"type":47,"value":2093},"test data",{"type":42,"tag":200,"props":2095,"children":2096},{"style":1050},[2097],{"type":47,"value":1612},{"type":42,"tag":200,"props":2099,"children":2100},{"style":1050},[2101],{"type":47,"value":2102}," >",{"type":42,"tag":200,"props":2104,"children":2105},{"style":386},[2106],{"type":47,"value":2107}," corpus\u002Fseed1\n",{"type":42,"tag":200,"props":2109,"children":2110},{"class":202,"line":231},[2111,2115,2120,2125,2130,2134],{"type":42,"tag":200,"props":2112,"children":2113},{"style":2081},[2114],{"type":47,"value":2084},{"type":42,"tag":200,"props":2116,"children":2117},{"style":1050},[2118],{"type":47,"value":2119}," '",{"type":42,"tag":200,"props":2121,"children":2122},{"style":386},[2123],{"type":47,"value":2124},"{\"key\": \"value\"}",{"type":42,"tag":200,"props":2126,"children":2127},{"style":1050},[2128],{"type":47,"value":2129},"'",{"type":42,"tag":200,"props":2131,"children":2132},{"style":1050},[2133],{"type":47,"value":2102},{"type":42,"tag":200,"props":2135,"children":2136},{"style":386},[2137],{"type":47,"value":2138}," corpus\u002Fseed2\n",{"type":42,"tag":50,"props":2140,"children":2141},{},[2142],{"type":47,"value":2143},"Run with corpus:",{"type":42,"tag":189,"props":2145,"children":2147},{"className":369,"code":2146,"language":371,"meta":193,"style":193},"python fuzz.py corpus\u002F\n",[2148],{"type":42,"tag":196,"props":2149,"children":2150},{"__ignoreMap":193},[2151],{"type":42,"tag":200,"props":2152,"children":2153},{"class":202,"line":203},[2154,2158,2163],{"type":42,"tag":200,"props":2155,"children":2156},{"style":381},[2157],{"type":47,"value":19},{"type":42,"tag":200,"props":2159,"children":2160},{"style":386},[2161],{"type":47,"value":2162}," fuzz.py",{"type":42,"tag":200,"props":2164,"children":2165},{"style":386},[2166],{"type":47,"value":2167}," corpus\u002F\n",{"type":42,"tag":402,"props":2169,"children":2171},{"id":2170},"corpus-minimization",[2172],{"type":47,"value":2173},"Corpus Minimization",{"type":42,"tag":50,"props":2175,"children":2176},{},[2177],{"type":47,"value":2178},"Atheris inherits corpus minimization from libFuzzer:",{"type":42,"tag":189,"props":2180,"children":2182},{"className":369,"code":2181,"language":371,"meta":193,"style":193},"python fuzz.py -merge=1 new_corpus\u002F old_corpus\u002F\n",[2183],{"type":42,"tag":196,"props":2184,"children":2185},{"__ignoreMap":193},[2186],{"type":42,"tag":200,"props":2187,"children":2188},{"class":202,"line":203},[2189,2193,2197,2202,2207],{"type":42,"tag":200,"props":2190,"children":2191},{"style":381},[2192],{"type":47,"value":19},{"type":42,"tag":200,"props":2194,"children":2195},{"style":386},[2196],{"type":47,"value":2162},{"type":42,"tag":200,"props":2198,"children":2199},{"style":386},[2200],{"type":47,"value":2201}," -merge=1",{"type":42,"tag":200,"props":2203,"children":2204},{"style":386},[2205],{"type":47,"value":2206}," new_corpus\u002F",{"type":42,"tag":200,"props":2208,"children":2209},{"style":386},[2210],{"type":47,"value":2211}," old_corpus\u002F\n",{"type":42,"tag":1402,"props":2213,"children":2214},{},[2215],{"type":42,"tag":50,"props":2216,"children":2217},{},[2218,2222,2224,2229],{"type":42,"tag":152,"props":2219,"children":2220},{},[2221],{"type":47,"value":1412},{"type":47,"value":2223}," For corpus creation strategies, dictionaries, and seed selection,\nsee the ",{"type":42,"tag":152,"props":2225,"children":2226},{},[2227],{"type":47,"value":2228},"fuzzing-corpus",{"type":47,"value":1421},{"type":42,"tag":56,"props":2231,"children":2233},{"id":2232},"running-campaigns",[2234],{"type":47,"value":2235},"Running Campaigns",{"type":42,"tag":402,"props":2237,"children":2239},{"id":2238},"basic-run",[2240],{"type":47,"value":2241},"Basic Run",{"type":42,"tag":189,"props":2243,"children":2244},{"className":369,"code":370,"language":371,"meta":193,"style":193},[2245],{"type":42,"tag":196,"props":2246,"children":2247},{"__ignoreMap":193},[2248],{"type":42,"tag":200,"props":2249,"children":2250},{"class":202,"line":203},[2251,2255],{"type":42,"tag":200,"props":2252,"children":2253},{"style":381},[2254],{"type":47,"value":19},{"type":42,"tag":200,"props":2256,"children":2257},{"style":386},[2258],{"type":47,"value":389},{"type":42,"tag":402,"props":2260,"children":2262},{"id":2261},"with-corpus-directory",[2263],{"type":47,"value":2264},"With Corpus Directory",{"type":42,"tag":189,"props":2266,"children":2267},{"className":369,"code":2146,"language":371,"meta":193,"style":193},[2268],{"type":42,"tag":196,"props":2269,"children":2270},{"__ignoreMap":193},[2271],{"type":42,"tag":200,"props":2272,"children":2273},{"class":202,"line":203},[2274,2278,2282],{"type":42,"tag":200,"props":2275,"children":2276},{"style":381},[2277],{"type":47,"value":19},{"type":42,"tag":200,"props":2279,"children":2280},{"style":386},[2281],{"type":47,"value":2162},{"type":42,"tag":200,"props":2283,"children":2284},{"style":386},[2285],{"type":47,"value":2167},{"type":42,"tag":402,"props":2287,"children":2289},{"id":2288},"common-options",[2290],{"type":47,"value":2291},"Common Options",{"type":42,"tag":189,"props":2293,"children":2295},{"className":369,"code":2294,"language":371,"meta":193,"style":193},"# Run for 10 minutes\npython fuzz.py -max_total_time=600\n\n# Limit input size\npython fuzz.py -max_len=1024\n\n# Run with multiple workers\npython fuzz.py -workers=4 -jobs=4\n",[2296],{"type":42,"tag":196,"props":2297,"children":2298},{"__ignoreMap":193},[2299,2307,2323,2330,2338,2354,2361,2369],{"type":42,"tag":200,"props":2300,"children":2301},{"class":202,"line":203},[2302],{"type":42,"tag":200,"props":2303,"children":2304},{"style":2072},[2305],{"type":47,"value":2306},"# Run for 10 minutes\n",{"type":42,"tag":200,"props":2308,"children":2309},{"class":202,"line":212},[2310,2314,2318],{"type":42,"tag":200,"props":2311,"children":2312},{"style":381},[2313],{"type":47,"value":19},{"type":42,"tag":200,"props":2315,"children":2316},{"style":386},[2317],{"type":47,"value":2162},{"type":42,"tag":200,"props":2319,"children":2320},{"style":386},[2321],{"type":47,"value":2322}," -max_total_time=600\n",{"type":42,"tag":200,"props":2324,"children":2325},{"class":202,"line":221},[2326],{"type":42,"tag":200,"props":2327,"children":2328},{"emptyLinePlaceholder":225},[2329],{"type":47,"value":228},{"type":42,"tag":200,"props":2331,"children":2332},{"class":202,"line":231},[2333],{"type":42,"tag":200,"props":2334,"children":2335},{"style":2072},[2336],{"type":47,"value":2337},"# Limit input size\n",{"type":42,"tag":200,"props":2339,"children":2340},{"class":202,"line":240},[2341,2345,2349],{"type":42,"tag":200,"props":2342,"children":2343},{"style":381},[2344],{"type":47,"value":19},{"type":42,"tag":200,"props":2346,"children":2347},{"style":386},[2348],{"type":47,"value":2162},{"type":42,"tag":200,"props":2350,"children":2351},{"style":386},[2352],{"type":47,"value":2353}," -max_len=1024\n",{"type":42,"tag":200,"props":2355,"children":2356},{"class":202,"line":249},[2357],{"type":42,"tag":200,"props":2358,"children":2359},{"emptyLinePlaceholder":225},[2360],{"type":47,"value":228},{"type":42,"tag":200,"props":2362,"children":2363},{"class":202,"line":258},[2364],{"type":42,"tag":200,"props":2365,"children":2366},{"style":2072},[2367],{"type":47,"value":2368},"# Run with multiple workers\n",{"type":42,"tag":200,"props":2370,"children":2371},{"class":202,"line":267},[2372,2376,2380,2385],{"type":42,"tag":200,"props":2373,"children":2374},{"style":381},[2375],{"type":47,"value":19},{"type":42,"tag":200,"props":2377,"children":2378},{"style":386},[2379],{"type":47,"value":2162},{"type":42,"tag":200,"props":2381,"children":2382},{"style":386},[2383],{"type":47,"value":2384}," -workers=4",{"type":42,"tag":200,"props":2386,"children":2387},{"style":386},[2388],{"type":47,"value":2389}," -jobs=4\n",{"type":42,"tag":402,"props":2391,"children":2393},{"id":2392},"interpreting-output",[2394],{"type":47,"value":2395},"Interpreting Output",{"type":42,"tag":63,"props":2397,"children":2398},{},[2399,2415],{"type":42,"tag":67,"props":2400,"children":2401},{},[2402],{"type":42,"tag":71,"props":2403,"children":2404},{},[2405,2410],{"type":42,"tag":75,"props":2406,"children":2407},{},[2408],{"type":47,"value":2409},"Output",{"type":42,"tag":75,"props":2411,"children":2412},{},[2413],{"type":47,"value":2414},"Meaning",{"type":42,"tag":91,"props":2416,"children":2417},{},[2418,2435,2452,2469,2486],{"type":42,"tag":71,"props":2419,"children":2420},{},[2421,2430],{"type":42,"tag":98,"props":2422,"children":2423},{},[2424],{"type":42,"tag":196,"props":2425,"children":2427},{"className":2426},[],[2428],{"type":47,"value":2429},"NEW    cov: X",{"type":42,"tag":98,"props":2431,"children":2432},{},[2433],{"type":47,"value":2434},"Found new coverage, corpus expanded",{"type":42,"tag":71,"props":2436,"children":2437},{},[2438,2447],{"type":42,"tag":98,"props":2439,"children":2440},{},[2441],{"type":42,"tag":196,"props":2442,"children":2444},{"className":2443},[],[2445],{"type":47,"value":2446},"pulse  cov: X",{"type":42,"tag":98,"props":2448,"children":2449},{},[2450],{"type":47,"value":2451},"Periodic status update",{"type":42,"tag":71,"props":2453,"children":2454},{},[2455,2464],{"type":42,"tag":98,"props":2456,"children":2457},{},[2458],{"type":42,"tag":196,"props":2459,"children":2461},{"className":2460},[],[2462],{"type":47,"value":2463},"exec\u002Fs: X",{"type":42,"tag":98,"props":2465,"children":2466},{},[2467],{"type":47,"value":2468},"Executions per second (throughput)",{"type":42,"tag":71,"props":2470,"children":2471},{},[2472,2481],{"type":42,"tag":98,"props":2473,"children":2474},{},[2475],{"type":42,"tag":196,"props":2476,"children":2478},{"className":2477},[],[2479],{"type":47,"value":2480},"corp: X\u002FYb",{"type":42,"tag":98,"props":2482,"children":2483},{},[2484],{"type":47,"value":2485},"Corpus size: X inputs, Y bytes total",{"type":42,"tag":71,"props":2487,"children":2488},{},[2489,2498],{"type":42,"tag":98,"props":2490,"children":2491},{},[2492],{"type":42,"tag":196,"props":2493,"children":2495},{"className":2494},[],[2496],{"type":47,"value":2497},"ERROR: libFuzzer",{"type":42,"tag":98,"props":2499,"children":2500},{},[2501],{"type":47,"value":2502},"Crash detected",{"type":42,"tag":56,"props":2504,"children":2506},{"id":2505},"sanitizer-integration",[2507],{"type":47,"value":2508},"Sanitizer Integration",{"type":42,"tag":402,"props":2510,"children":2512},{"id":2511},"addresssanitizer-asan",[2513],{"type":47,"value":2514},"AddressSanitizer (ASan)",{"type":42,"tag":50,"props":2516,"children":2517},{},[2518],{"type":47,"value":2519},"AddressSanitizer is automatically integrated when using the provided Docker environment or when compiling with appropriate flags.",{"type":42,"tag":50,"props":2521,"children":2522},{},[2523],{"type":47,"value":2524},"For local setup:",{"type":42,"tag":189,"props":2526,"children":2528},{"className":369,"code":2527,"language":371,"meta":193,"style":193},"export CFLAGS=\"-fsanitize=address,fuzzer-no-link\"\nexport CXXFLAGS=\"-fsanitize=address,fuzzer-no-link\"\n",[2529],{"type":42,"tag":196,"props":2530,"children":2531},{"__ignoreMap":193},[2532,2559],{"type":42,"tag":200,"props":2533,"children":2534},{"class":202,"line":203},[2535,2539,2543,2547,2551,2555],{"type":42,"tag":200,"props":2536,"children":2537},{"style":1593},[2538],{"type":47,"value":1596},{"type":42,"tag":200,"props":2540,"children":2541},{"style":1599},[2542],{"type":47,"value":1633},{"type":42,"tag":200,"props":2544,"children":2545},{"style":1050},[2546],{"type":47,"value":1607},{"type":42,"tag":200,"props":2548,"children":2549},{"style":1050},[2550],{"type":47,"value":1612},{"type":42,"tag":200,"props":2552,"children":2553},{"style":386},[2554],{"type":47,"value":1646},{"type":42,"tag":200,"props":2556,"children":2557},{"style":1050},[2558],{"type":47,"value":1063},{"type":42,"tag":200,"props":2560,"children":2561},{"class":202,"line":212},[2562,2566,2570,2574,2578,2582],{"type":42,"tag":200,"props":2563,"children":2564},{"style":1593},[2565],{"type":47,"value":1596},{"type":42,"tag":200,"props":2567,"children":2568},{"style":1599},[2569],{"type":47,"value":1691},{"type":42,"tag":200,"props":2571,"children":2572},{"style":1050},[2573],{"type":47,"value":1607},{"type":42,"tag":200,"props":2575,"children":2576},{"style":1050},[2577],{"type":47,"value":1612},{"type":42,"tag":200,"props":2579,"children":2580},{"style":386},[2581],{"type":47,"value":1646},{"type":42,"tag":200,"props":2583,"children":2584},{"style":1050},[2585],{"type":47,"value":1063},{"type":42,"tag":50,"props":2587,"children":2588},{},[2589],{"type":47,"value":2590},"Configure ASan behavior:",{"type":42,"tag":189,"props":2592,"children":2594},{"className":369,"code":2593,"language":371,"meta":193,"style":193},"export ASAN_OPTIONS=\"allocator_may_return_null=1,detect_leaks=0\"\n",[2595],{"type":42,"tag":196,"props":2596,"children":2597},{"__ignoreMap":193},[2598],{"type":42,"tag":200,"props":2599,"children":2600},{"class":202,"line":203},[2601,2605,2610,2614,2618,2623],{"type":42,"tag":200,"props":2602,"children":2603},{"style":1593},[2604],{"type":47,"value":1596},{"type":42,"tag":200,"props":2606,"children":2607},{"style":1599},[2608],{"type":47,"value":2609}," ASAN_OPTIONS",{"type":42,"tag":200,"props":2611,"children":2612},{"style":1050},[2613],{"type":47,"value":1607},{"type":42,"tag":200,"props":2615,"children":2616},{"style":1050},[2617],{"type":47,"value":1612},{"type":42,"tag":200,"props":2619,"children":2620},{"style":386},[2621],{"type":47,"value":2622},"allocator_may_return_null=1,detect_leaks=0",{"type":42,"tag":200,"props":2624,"children":2625},{"style":1050},[2626],{"type":47,"value":1063},{"type":42,"tag":402,"props":2628,"children":2630},{"id":2629},"ld_preload-configuration",[2631],{"type":47,"value":2632},"LD_PRELOAD Configuration",{"type":42,"tag":50,"props":2634,"children":2635},{},[2636],{"type":47,"value":2637},"For native extension fuzzing:",{"type":42,"tag":189,"props":2639,"children":2641},{"className":369,"code":2640,"language":371,"meta":193,"style":193},"export LD_PRELOAD=\"$(python -c 'import atheris; import os; print(os.path.join(os.path.dirname(atheris.__file__), \"asan_with_fuzzer.so\"))')\"\n",[2642],{"type":42,"tag":196,"props":2643,"children":2644},{"__ignoreMap":193},[2645],{"type":42,"tag":200,"props":2646,"children":2647},{"class":202,"line":203},[2648,2652,2657,2661,2666,2670,2675,2679,2684],{"type":42,"tag":200,"props":2649,"children":2650},{"style":1593},[2651],{"type":47,"value":1596},{"type":42,"tag":200,"props":2653,"children":2654},{"style":1599},[2655],{"type":47,"value":2656}," LD_PRELOAD",{"type":42,"tag":200,"props":2658,"children":2659},{"style":1050},[2660],{"type":47,"value":1607},{"type":42,"tag":200,"props":2662,"children":2663},{"style":1050},[2664],{"type":47,"value":2665},"\"$(",{"type":42,"tag":200,"props":2667,"children":2668},{"style":381},[2669],{"type":47,"value":19},{"type":42,"tag":200,"props":2671,"children":2672},{"style":386},[2673],{"type":47,"value":2674}," -c ",{"type":42,"tag":200,"props":2676,"children":2677},{"style":1050},[2678],{"type":47,"value":2129},{"type":42,"tag":200,"props":2680,"children":2681},{"style":386},[2682],{"type":47,"value":2683},"import atheris; import os; print(os.path.join(os.path.dirname(atheris.__file__), \"asan_with_fuzzer.so\"))",{"type":42,"tag":200,"props":2685,"children":2686},{"style":1050},[2687],{"type":47,"value":2688},"')\"\n",{"type":42,"tag":1402,"props":2690,"children":2691},{},[2692],{"type":42,"tag":50,"props":2693,"children":2694},{},[2695,2699,2701,2706,2708,2713],{"type":42,"tag":152,"props":2696,"children":2697},{},[2698],{"type":47,"value":1412},{"type":47,"value":2700}," For detailed sanitizer configuration, common issues, and advanced flags,\nsee the ",{"type":42,"tag":152,"props":2702,"children":2703},{},[2704],{"type":47,"value":2705},"address-sanitizer",{"type":47,"value":2707}," and ",{"type":42,"tag":152,"props":2709,"children":2710},{},[2711],{"type":47,"value":2712},"undefined-behavior-sanitizer",{"type":47,"value":2714}," technique skills.",{"type":42,"tag":402,"props":2716,"children":2718},{"id":2717},"common-sanitizer-issues",[2719],{"type":47,"value":2720},"Common Sanitizer Issues",{"type":42,"tag":63,"props":2722,"children":2723},{},[2724,2740],{"type":42,"tag":67,"props":2725,"children":2726},{},[2727],{"type":42,"tag":71,"props":2728,"children":2729},{},[2730,2735],{"type":42,"tag":75,"props":2731,"children":2732},{},[2733],{"type":47,"value":2734},"Issue",{"type":42,"tag":75,"props":2736,"children":2737},{},[2738],{"type":47,"value":2739},"Solution",{"type":42,"tag":91,"props":2741,"children":2742},{},[2743,2774,2793,2811],{"type":42,"tag":71,"props":2744,"children":2745},{},[2746,2756],{"type":42,"tag":98,"props":2747,"children":2748},{},[2749,2754],{"type":42,"tag":196,"props":2750,"children":2752},{"className":2751},[],[2753],{"type":47,"value":2030},{"type":47,"value":2755}," not set",{"type":42,"tag":98,"props":2757,"children":2758},{},[2759,2761,2766,2768],{"type":47,"value":2760},"Export ",{"type":42,"tag":196,"props":2762,"children":2764},{"className":2763},[],[2765],{"type":47,"value":2030},{"type":47,"value":2767}," to point to ",{"type":42,"tag":196,"props":2769,"children":2771},{"className":2770},[],[2772],{"type":47,"value":2773},"asan_with_fuzzer.so",{"type":42,"tag":71,"props":2775,"children":2776},{},[2777,2782],{"type":42,"tag":98,"props":2778,"children":2779},{},[2780],{"type":47,"value":2781},"Memory allocation failures",{"type":42,"tag":98,"props":2783,"children":2784},{},[2785,2787],{"type":47,"value":2786},"Set ",{"type":42,"tag":196,"props":2788,"children":2790},{"className":2789},[],[2791],{"type":47,"value":2792},"ASAN_OPTIONS=allocator_may_return_null=1",{"type":42,"tag":71,"props":2794,"children":2795},{},[2796,2801],{"type":42,"tag":98,"props":2797,"children":2798},{},[2799],{"type":47,"value":2800},"Leak detection noise",{"type":42,"tag":98,"props":2802,"children":2803},{},[2804,2805],{"type":47,"value":2786},{"type":42,"tag":196,"props":2806,"children":2808},{"className":2807},[],[2809],{"type":47,"value":2810},"ASAN_OPTIONS=detect_leaks=0",{"type":42,"tag":71,"props":2812,"children":2813},{},[2814,2819],{"type":42,"tag":98,"props":2815,"children":2816},{},[2817],{"type":47,"value":2818},"Missing symbolizer",{"type":42,"tag":98,"props":2820,"children":2821},{},[2822,2823,2829,2831],{"type":47,"value":2786},{"type":42,"tag":196,"props":2824,"children":2826},{"className":2825},[],[2827],{"type":47,"value":2828},"ASAN_SYMBOLIZER_PATH",{"type":47,"value":2830}," to ",{"type":42,"tag":196,"props":2832,"children":2834},{"className":2833},[],[2835],{"type":47,"value":2836},"llvm-symbolizer",{"type":42,"tag":56,"props":2838,"children":2840},{"id":2839},"advanced-usage",[2841],{"type":47,"value":2842},"Advanced Usage",{"type":42,"tag":402,"props":2844,"children":2846},{"id":2845},"tips-and-tricks",[2847],{"type":47,"value":2848},"Tips and Tricks",{"type":42,"tag":63,"props":2850,"children":2851},{},[2852,2868],{"type":42,"tag":67,"props":2853,"children":2854},{},[2855],{"type":42,"tag":71,"props":2856,"children":2857},{},[2858,2863],{"type":42,"tag":75,"props":2859,"children":2860},{},[2861],{"type":47,"value":2862},"Tip",{"type":42,"tag":75,"props":2864,"children":2865},{},[2866],{"type":47,"value":2867},"Why It Helps",{"type":42,"tag":91,"props":2869,"children":2870},{},[2871,2890,2909,2922],{"type":42,"tag":71,"props":2872,"children":2873},{},[2874,2885],{"type":42,"tag":98,"props":2875,"children":2876},{},[2877,2878,2883],{"type":47,"value":1335},{"type":42,"tag":196,"props":2879,"children":2881},{"className":2880},[],[2882],{"type":47,"value":1374},{"type":47,"value":2884}," early",{"type":42,"tag":98,"props":2886,"children":2887},{},[2888],{"type":47,"value":2889},"Ensures all imports are instrumented for coverage",{"type":42,"tag":71,"props":2891,"children":2892},{},[2893,2904],{"type":42,"tag":98,"props":2894,"children":2895},{},[2896,2898],{"type":47,"value":2897},"Start with small ",{"type":42,"tag":196,"props":2899,"children":2901},{"className":2900},[],[2902],{"type":47,"value":2903},"max_len",{"type":42,"tag":98,"props":2905,"children":2906},{},[2907],{"type":47,"value":2908},"Faster initial fuzzing, gradually increase",{"type":42,"tag":71,"props":2910,"children":2911},{},[2912,2917],{"type":42,"tag":98,"props":2913,"children":2914},{},[2915],{"type":47,"value":2916},"Use dictionaries for structured formats",{"type":42,"tag":98,"props":2918,"children":2919},{},[2920],{"type":47,"value":2921},"Helps fuzzer understand format tokens",{"type":42,"tag":71,"props":2923,"children":2924},{},[2925,2930],{"type":42,"tag":98,"props":2926,"children":2927},{},[2928],{"type":47,"value":2929},"Run multiple parallel instances",{"type":42,"tag":98,"props":2931,"children":2932},{},[2933],{"type":47,"value":2934},"Better coverage exploration",{"type":42,"tag":402,"props":2936,"children":2938},{"id":2937},"custom-instrumentation",[2939],{"type":47,"value":2940},"Custom Instrumentation",{"type":42,"tag":50,"props":2942,"children":2943},{},[2944],{"type":47,"value":2945},"Fine-tune what gets instrumented:",{"type":42,"tag":189,"props":2947,"children":2949},{"className":191,"code":2948,"language":19,"meta":193,"style":193},"import atheris\n\n# Instrument only specific modules\nwith atheris.instrument_imports():\n    import target_module\n# Don't instrument test harness code\n\ndef test_one_input(data: bytes):\n    target_module.parse(data)\n",[2950],{"type":42,"tag":196,"props":2951,"children":2952},{"__ignoreMap":193},[2953,2960,2967,2975,2982,2990,2998,3005,3012],{"type":42,"tag":200,"props":2954,"children":2955},{"class":202,"line":203},[2956],{"type":42,"tag":200,"props":2957,"children":2958},{},[2959],{"type":47,"value":218},{"type":42,"tag":200,"props":2961,"children":2962},{"class":202,"line":212},[2963],{"type":42,"tag":200,"props":2964,"children":2965},{"emptyLinePlaceholder":225},[2966],{"type":47,"value":228},{"type":42,"tag":200,"props":2968,"children":2969},{"class":202,"line":221},[2970],{"type":42,"tag":200,"props":2971,"children":2972},{},[2973],{"type":47,"value":2974},"# Instrument only specific modules\n",{"type":42,"tag":200,"props":2976,"children":2977},{"class":202,"line":231},[2978],{"type":42,"tag":200,"props":2979,"children":2980},{},[2981],{"type":47,"value":1454},{"type":42,"tag":200,"props":2983,"children":2984},{"class":202,"line":240},[2985],{"type":42,"tag":200,"props":2986,"children":2987},{},[2988],{"type":47,"value":2989},"    import target_module\n",{"type":42,"tag":200,"props":2991,"children":2992},{"class":202,"line":249},[2993],{"type":42,"tag":200,"props":2994,"children":2995},{},[2996],{"type":47,"value":2997},"# Don't instrument test harness code\n",{"type":42,"tag":200,"props":2999,"children":3000},{"class":202,"line":258},[3001],{"type":42,"tag":200,"props":3002,"children":3003},{"emptyLinePlaceholder":225},[3004],{"type":47,"value":228},{"type":42,"tag":200,"props":3006,"children":3007},{"class":202,"line":267},[3008],{"type":42,"tag":200,"props":3009,"children":3010},{},[3011],{"type":47,"value":246},{"type":42,"tag":200,"props":3013,"children":3014},{"class":202,"line":276},[3015],{"type":42,"tag":200,"props":3016,"children":3017},{},[3018],{"type":47,"value":3019},"    target_module.parse(data)\n",{"type":42,"tag":402,"props":3021,"children":3023},{"id":3022},"performance-tuning",[3024],{"type":47,"value":3025},"Performance Tuning",{"type":42,"tag":63,"props":3027,"children":3028},{},[3029,3045],{"type":42,"tag":67,"props":3030,"children":3031},{},[3032],{"type":42,"tag":71,"props":3033,"children":3034},{},[3035,3040],{"type":42,"tag":75,"props":3036,"children":3037},{},[3038],{"type":47,"value":3039},"Setting",{"type":42,"tag":75,"props":3041,"children":3042},{},[3043],{"type":47,"value":3044},"Impact",{"type":42,"tag":91,"props":3046,"children":3047},{},[3048,3065,3082],{"type":42,"tag":71,"props":3049,"children":3050},{},[3051,3060],{"type":42,"tag":98,"props":3052,"children":3053},{},[3054],{"type":42,"tag":196,"props":3055,"children":3057},{"className":3056},[],[3058],{"type":47,"value":3059},"-max_len=N",{"type":42,"tag":98,"props":3061,"children":3062},{},[3063],{"type":47,"value":3064},"Smaller values = faster execution",{"type":42,"tag":71,"props":3066,"children":3067},{},[3068,3077],{"type":42,"tag":98,"props":3069,"children":3070},{},[3071],{"type":42,"tag":196,"props":3072,"children":3074},{"className":3073},[],[3075],{"type":47,"value":3076},"-workers=N -jobs=N",{"type":42,"tag":98,"props":3078,"children":3079},{},[3080],{"type":47,"value":3081},"Parallel fuzzing for faster coverage",{"type":42,"tag":71,"props":3083,"children":3084},{},[3085,3094],{"type":42,"tag":98,"props":3086,"children":3087},{},[3088],{"type":42,"tag":196,"props":3089,"children":3091},{"className":3090},[],[3092],{"type":47,"value":3093},"ASAN_OPTIONS=fast_unwind_on_malloc=0",{"type":42,"tag":98,"props":3095,"children":3096},{},[3097],{"type":47,"value":3098},"Better stack traces, slower execution",{"type":42,"tag":402,"props":3100,"children":3102},{"id":3101},"undefinedbehaviorsanitizer-ubsan",[3103],{"type":47,"value":3104},"UndefinedBehaviorSanitizer (UBSan)",{"type":42,"tag":50,"props":3106,"children":3107},{},[3108],{"type":47,"value":3109},"Add UBSan to catch additional bugs:",{"type":42,"tag":189,"props":3111,"children":3113},{"className":369,"code":3112,"language":371,"meta":193,"style":193},"export CFLAGS=\"-fsanitize=address,undefined,fuzzer-no-link\"\nexport CXXFLAGS=\"-fsanitize=address,undefined,fuzzer-no-link\"\n",[3114],{"type":42,"tag":196,"props":3115,"children":3116},{"__ignoreMap":193},[3117,3145],{"type":42,"tag":200,"props":3118,"children":3119},{"class":202,"line":203},[3120,3124,3128,3132,3136,3141],{"type":42,"tag":200,"props":3121,"children":3122},{"style":1593},[3123],{"type":47,"value":1596},{"type":42,"tag":200,"props":3125,"children":3126},{"style":1599},[3127],{"type":47,"value":1633},{"type":42,"tag":200,"props":3129,"children":3130},{"style":1050},[3131],{"type":47,"value":1607},{"type":42,"tag":200,"props":3133,"children":3134},{"style":1050},[3135],{"type":47,"value":1612},{"type":42,"tag":200,"props":3137,"children":3138},{"style":386},[3139],{"type":47,"value":3140},"-fsanitize=address,undefined,fuzzer-no-link",{"type":42,"tag":200,"props":3142,"children":3143},{"style":1050},[3144],{"type":47,"value":1063},{"type":42,"tag":200,"props":3146,"children":3147},{"class":202,"line":212},[3148,3152,3156,3160,3164,3168],{"type":42,"tag":200,"props":3149,"children":3150},{"style":1593},[3151],{"type":47,"value":1596},{"type":42,"tag":200,"props":3153,"children":3154},{"style":1599},[3155],{"type":47,"value":1691},{"type":42,"tag":200,"props":3157,"children":3158},{"style":1050},[3159],{"type":47,"value":1607},{"type":42,"tag":200,"props":3161,"children":3162},{"style":1050},[3163],{"type":47,"value":1612},{"type":42,"tag":200,"props":3165,"children":3166},{"style":386},[3167],{"type":47,"value":3140},{"type":42,"tag":200,"props":3169,"children":3170},{"style":1050},[3171],{"type":47,"value":1063},{"type":42,"tag":50,"props":3173,"children":3174},{},[3175],{"type":47,"value":3176},"Note: Modify flags in Dockerfile if using containerized setup.",{"type":42,"tag":56,"props":3178,"children":3180},{"id":3179},"real-world-examples",[3181],{"type":47,"value":3182},"Real-World Examples",{"type":42,"tag":402,"props":3184,"children":3186},{"id":3185},"example-pure-python-parser",[3187],{"type":47,"value":3188},"Example: Pure Python Parser",{"type":42,"tag":189,"props":3190,"children":3192},{"className":191,"code":3191,"language":19,"meta":193,"style":193},"import sys\nimport atheris\nimport json\n\n@atheris.instrument_func\ndef test_one_input(data: bytes):\n    try:\n        # Fuzz Python's JSON parser\n        json.loads(data.decode('utf-8', errors='ignore'))\n    except (ValueError, UnicodeDecodeError):\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n",[3193],{"type":42,"tag":196,"props":3194,"children":3195},{"__ignoreMap":193},[3196,3203,3210,3218,3225,3232,3239,3246,3254,3262,3270,3277,3284,3291,3298,3305,3312,3319],{"type":42,"tag":200,"props":3197,"children":3198},{"class":202,"line":203},[3199],{"type":42,"tag":200,"props":3200,"children":3201},{},[3202],{"type":47,"value":209},{"type":42,"tag":200,"props":3204,"children":3205},{"class":202,"line":212},[3206],{"type":42,"tag":200,"props":3207,"children":3208},{},[3209],{"type":47,"value":218},{"type":42,"tag":200,"props":3211,"children":3212},{"class":202,"line":221},[3213],{"type":42,"tag":200,"props":3214,"children":3215},{},[3216],{"type":47,"value":3217},"import json\n",{"type":42,"tag":200,"props":3219,"children":3220},{"class":202,"line":231},[3221],{"type":42,"tag":200,"props":3222,"children":3223},{"emptyLinePlaceholder":225},[3224],{"type":47,"value":228},{"type":42,"tag":200,"props":3226,"children":3227},{"class":202,"line":240},[3228],{"type":42,"tag":200,"props":3229,"children":3230},{},[3231],{"type":47,"value":237},{"type":42,"tag":200,"props":3233,"children":3234},{"class":202,"line":249},[3235],{"type":42,"tag":200,"props":3236,"children":3237},{},[3238],{"type":47,"value":246},{"type":42,"tag":200,"props":3240,"children":3241},{"class":202,"line":258},[3242],{"type":42,"tag":200,"props":3243,"children":3244},{},[3245],{"type":47,"value":1210},{"type":42,"tag":200,"props":3247,"children":3248},{"class":202,"line":267},[3249],{"type":42,"tag":200,"props":3250,"children":3251},{},[3252],{"type":47,"value":3253},"        # Fuzz Python's JSON parser\n",{"type":42,"tag":200,"props":3255,"children":3256},{"class":202,"line":276},[3257],{"type":42,"tag":200,"props":3258,"children":3259},{},[3260],{"type":47,"value":3261},"        json.loads(data.decode('utf-8', errors='ignore'))\n",{"type":42,"tag":200,"props":3263,"children":3264},{"class":202,"line":285},[3265],{"type":42,"tag":200,"props":3266,"children":3267},{},[3268],{"type":47,"value":3269},"    except (ValueError, UnicodeDecodeError):\n",{"type":42,"tag":200,"props":3271,"children":3272},{"class":202,"line":294},[3273],{"type":42,"tag":200,"props":3274,"children":3275},{},[3276],{"type":47,"value":1242},{"type":42,"tag":200,"props":3278,"children":3279},{"class":202,"line":303},[3280],{"type":42,"tag":200,"props":3281,"children":3282},{"emptyLinePlaceholder":225},[3283],{"type":47,"value":228},{"type":42,"tag":200,"props":3285,"children":3286},{"class":202,"line":311},[3287],{"type":42,"tag":200,"props":3288,"children":3289},{},[3290],{"type":47,"value":317},{"type":42,"tag":200,"props":3292,"children":3293},{"class":202,"line":320},[3294],{"type":42,"tag":200,"props":3295,"children":3296},{},[3297],{"type":47,"value":326},{"type":42,"tag":200,"props":3299,"children":3300},{"class":202,"line":329},[3301],{"type":42,"tag":200,"props":3302,"children":3303},{},[3304],{"type":47,"value":335},{"type":42,"tag":200,"props":3306,"children":3307},{"class":202,"line":338},[3308],{"type":42,"tag":200,"props":3309,"children":3310},{"emptyLinePlaceholder":225},[3311],{"type":47,"value":228},{"type":42,"tag":200,"props":3313,"children":3314},{"class":202,"line":346},[3315],{"type":42,"tag":200,"props":3316,"children":3317},{},[3318],{"type":47,"value":352},{"type":42,"tag":200,"props":3320,"children":3321},{"class":202,"line":355},[3322],{"type":42,"tag":200,"props":3323,"children":3324},{},[3325],{"type":47,"value":361},{"type":42,"tag":402,"props":3327,"children":3329},{"id":3328},"example-http-request-parsing",[3330],{"type":47,"value":3331},"Example: HTTP Request Parsing",{"type":42,"tag":189,"props":3333,"children":3335},{"className":191,"code":3334,"language":19,"meta":193,"style":193},"import sys\nimport atheris\n\nwith atheris.instrument_imports():\n    from urllib3 import HTTPResponse\n    from io import BytesIO\n\ndef test_one_input(data: bytes):\n    try:\n        # Fuzz HTTP response parsing\n        fake_response = HTTPResponse(\n            body=BytesIO(data),\n            headers={},\n            preload_content=False\n        )\n        fake_response.read()\n    except Exception:\n        pass\n\ndef main():\n    atheris.Setup(sys.argv, test_one_input)\n    atheris.Fuzz()\n\nif __name__ == \"__main__\":\n    main()\n",[3336],{"type":42,"tag":196,"props":3337,"children":3338},{"__ignoreMap":193},[3339,3346,3353,3360,3367,3375,3383,3390,3397,3404,3412,3420,3428,3436,3444,3452,3460,3467,3474,3481,3488,3495,3502,3509,3516],{"type":42,"tag":200,"props":3340,"children":3341},{"class":202,"line":203},[3342],{"type":42,"tag":200,"props":3343,"children":3344},{},[3345],{"type":47,"value":209},{"type":42,"tag":200,"props":3347,"children":3348},{"class":202,"line":212},[3349],{"type":42,"tag":200,"props":3350,"children":3351},{},[3352],{"type":47,"value":218},{"type":42,"tag":200,"props":3354,"children":3355},{"class":202,"line":221},[3356],{"type":42,"tag":200,"props":3357,"children":3358},{"emptyLinePlaceholder":225},[3359],{"type":47,"value":228},{"type":42,"tag":200,"props":3361,"children":3362},{"class":202,"line":231},[3363],{"type":42,"tag":200,"props":3364,"children":3365},{},[3366],{"type":47,"value":1454},{"type":42,"tag":200,"props":3368,"children":3369},{"class":202,"line":240},[3370],{"type":42,"tag":200,"props":3371,"children":3372},{},[3373],{"type":47,"value":3374},"    from urllib3 import HTTPResponse\n",{"type":42,"tag":200,"props":3376,"children":3377},{"class":202,"line":249},[3378],{"type":42,"tag":200,"props":3379,"children":3380},{},[3381],{"type":47,"value":3382},"    from io import BytesIO\n",{"type":42,"tag":200,"props":3384,"children":3385},{"class":202,"line":258},[3386],{"type":42,"tag":200,"props":3387,"children":3388},{"emptyLinePlaceholder":225},[3389],{"type":47,"value":228},{"type":42,"tag":200,"props":3391,"children":3392},{"class":202,"line":267},[3393],{"type":42,"tag":200,"props":3394,"children":3395},{},[3396],{"type":47,"value":246},{"type":42,"tag":200,"props":3398,"children":3399},{"class":202,"line":276},[3400],{"type":42,"tag":200,"props":3401,"children":3402},{},[3403],{"type":47,"value":1210},{"type":42,"tag":200,"props":3405,"children":3406},{"class":202,"line":285},[3407],{"type":42,"tag":200,"props":3408,"children":3409},{},[3410],{"type":47,"value":3411},"        # Fuzz HTTP response parsing\n",{"type":42,"tag":200,"props":3413,"children":3414},{"class":202,"line":294},[3415],{"type":42,"tag":200,"props":3416,"children":3417},{},[3418],{"type":47,"value":3419},"        fake_response = HTTPResponse(\n",{"type":42,"tag":200,"props":3421,"children":3422},{"class":202,"line":303},[3423],{"type":42,"tag":200,"props":3424,"children":3425},{},[3426],{"type":47,"value":3427},"            body=BytesIO(data),\n",{"type":42,"tag":200,"props":3429,"children":3430},{"class":202,"line":311},[3431],{"type":42,"tag":200,"props":3432,"children":3433},{},[3434],{"type":47,"value":3435},"            headers={},\n",{"type":42,"tag":200,"props":3437,"children":3438},{"class":202,"line":320},[3439],{"type":42,"tag":200,"props":3440,"children":3441},{},[3442],{"type":47,"value":3443},"            preload_content=False\n",{"type":42,"tag":200,"props":3445,"children":3446},{"class":202,"line":329},[3447],{"type":42,"tag":200,"props":3448,"children":3449},{},[3450],{"type":47,"value":3451},"        )\n",{"type":42,"tag":200,"props":3453,"children":3454},{"class":202,"line":338},[3455],{"type":42,"tag":200,"props":3456,"children":3457},{},[3458],{"type":47,"value":3459},"        fake_response.read()\n",{"type":42,"tag":200,"props":3461,"children":3462},{"class":202,"line":346},[3463],{"type":42,"tag":200,"props":3464,"children":3465},{},[3466],{"type":47,"value":1917},{"type":42,"tag":200,"props":3468,"children":3469},{"class":202,"line":355},[3470],{"type":42,"tag":200,"props":3471,"children":3472},{},[3473],{"type":47,"value":1242},{"type":42,"tag":200,"props":3475,"children":3476},{"class":202,"line":641},[3477],{"type":42,"tag":200,"props":3478,"children":3479},{"emptyLinePlaceholder":225},[3480],{"type":47,"value":228},{"type":42,"tag":200,"props":3482,"children":3483},{"class":202,"line":650},[3484],{"type":42,"tag":200,"props":3485,"children":3486},{},[3487],{"type":47,"value":317},{"type":42,"tag":200,"props":3489,"children":3490},{"class":202,"line":658},[3491],{"type":42,"tag":200,"props":3492,"children":3493},{},[3494],{"type":47,"value":326},{"type":42,"tag":200,"props":3496,"children":3497},{"class":202,"line":666},[3498],{"type":42,"tag":200,"props":3499,"children":3500},{},[3501],{"type":47,"value":335},{"type":42,"tag":200,"props":3503,"children":3504},{"class":202,"line":675},[3505],{"type":42,"tag":200,"props":3506,"children":3507},{"emptyLinePlaceholder":225},[3508],{"type":47,"value":228},{"type":42,"tag":200,"props":3510,"children":3511},{"class":202,"line":684},[3512],{"type":42,"tag":200,"props":3513,"children":3514},{},[3515],{"type":47,"value":352},{"type":42,"tag":200,"props":3517,"children":3518},{"class":202,"line":692},[3519],{"type":42,"tag":200,"props":3520,"children":3521},{},[3522],{"type":47,"value":361},{"type":42,"tag":56,"props":3524,"children":3526},{"id":3525},"troubleshooting",[3527],{"type":47,"value":3528},"Troubleshooting",{"type":42,"tag":63,"props":3530,"children":3531},{},[3532,3552],{"type":42,"tag":67,"props":3533,"children":3534},{},[3535],{"type":42,"tag":71,"props":3536,"children":3537},{},[3538,3543,3548],{"type":42,"tag":75,"props":3539,"children":3540},{},[3541],{"type":47,"value":3542},"Problem",{"type":42,"tag":75,"props":3544,"children":3545},{},[3546],{"type":47,"value":3547},"Cause",{"type":42,"tag":75,"props":3549,"children":3550},{},[3551],{"type":47,"value":2739},{"type":42,"tag":91,"props":3553,"children":3554},{},[3555,3579,3610,3635,3670],{"type":42,"tag":71,"props":3556,"children":3557},{},[3558,3563,3568],{"type":42,"tag":98,"props":3559,"children":3560},{},[3561],{"type":47,"value":3562},"No coverage increase",{"type":42,"tag":98,"props":3564,"children":3565},{},[3566],{"type":47,"value":3567},"Poor seed corpus or target not instrumented",{"type":42,"tag":98,"props":3569,"children":3570},{},[3571,3573],{"type":47,"value":3572},"Add better seeds, verify ",{"type":42,"tag":196,"props":3574,"children":3576},{"className":3575},[],[3577],{"type":47,"value":3578},"instrument_imports()",{"type":42,"tag":71,"props":3580,"children":3581},{},[3582,3587,3592],{"type":42,"tag":98,"props":3583,"children":3584},{},[3585],{"type":47,"value":3586},"Slow execution",{"type":42,"tag":98,"props":3588,"children":3589},{},[3590],{"type":47,"value":3591},"ASan overhead or large inputs",{"type":42,"tag":98,"props":3593,"children":3594},{},[3595,3597,3602,3604],{"type":47,"value":3596},"Reduce ",{"type":42,"tag":196,"props":3598,"children":3600},{"className":3599},[],[3601],{"type":47,"value":2903},{"type":47,"value":3603},", use ",{"type":42,"tag":196,"props":3605,"children":3607},{"className":3606},[],[3608],{"type":47,"value":3609},"ASAN_OPTIONS=fast_unwind_on_malloc=1",{"type":42,"tag":71,"props":3611,"children":3612},{},[3613,3618,3623],{"type":42,"tag":98,"props":3614,"children":3615},{},[3616],{"type":47,"value":3617},"Import errors",{"type":42,"tag":98,"props":3619,"children":3620},{},[3621],{"type":47,"value":3622},"Modules imported before instrumentation",{"type":42,"tag":98,"props":3624,"children":3625},{},[3626,3628,3633],{"type":47,"value":3627},"Move imports inside ",{"type":42,"tag":196,"props":3629,"children":3631},{"className":3630},[],[3632],{"type":47,"value":3578},{"type":47,"value":3634}," context",{"type":42,"tag":71,"props":3636,"children":3637},{},[3638,3643,3653],{"type":42,"tag":98,"props":3639,"children":3640},{},[3641],{"type":47,"value":3642},"Segfault without ASan output",{"type":42,"tag":98,"props":3644,"children":3645},{},[3646,3648],{"type":47,"value":3647},"Missing ",{"type":42,"tag":196,"props":3649,"children":3651},{"className":3650},[],[3652],{"type":47,"value":2030},{"type":42,"tag":98,"props":3654,"children":3655},{},[3656,3657,3662,3663,3668],{"type":47,"value":2786},{"type":42,"tag":196,"props":3658,"children":3660},{"className":3659},[],[3661],{"type":47,"value":2030},{"type":47,"value":2830},{"type":42,"tag":196,"props":3664,"children":3666},{"className":3665},[],[3667],{"type":47,"value":2773},{"type":47,"value":3669}," path",{"type":42,"tag":71,"props":3671,"children":3672},{},[3673,3678,3683],{"type":42,"tag":98,"props":3674,"children":3675},{},[3676],{"type":47,"value":3677},"Build failures",{"type":42,"tag":98,"props":3679,"children":3680},{},[3681],{"type":47,"value":3682},"Wrong compiler or missing flags",{"type":42,"tag":98,"props":3684,"children":3685},{},[3686,3688,3694,3696,3702],{"type":47,"value":3687},"Verify ",{"type":42,"tag":196,"props":3689,"children":3691},{"className":3690},[],[3692],{"type":47,"value":3693},"CC",{"type":47,"value":3695},", ",{"type":42,"tag":196,"props":3697,"children":3699},{"className":3698},[],[3700],{"type":47,"value":3701},"CFLAGS",{"type":47,"value":3703},", and clang version",{"type":42,"tag":56,"props":3705,"children":3707},{"id":3706},"related-skills",[3708],{"type":47,"value":3709},"Related Skills",{"type":42,"tag":402,"props":3711,"children":3713},{"id":3712},"technique-skills",[3714],{"type":47,"value":3715},"Technique Skills",{"type":42,"tag":63,"props":3717,"children":3718},{},[3719,3735],{"type":42,"tag":67,"props":3720,"children":3721},{},[3722],{"type":42,"tag":71,"props":3723,"children":3724},{},[3725,3730],{"type":42,"tag":75,"props":3726,"children":3727},{},[3728],{"type":47,"value":3729},"Skill",{"type":42,"tag":75,"props":3731,"children":3732},{},[3733],{"type":47,"value":3734},"Use Case",{"type":42,"tag":91,"props":3736,"children":3737},{},[3738,3753,3768,3783,3799],{"type":42,"tag":71,"props":3739,"children":3740},{},[3741,3748],{"type":42,"tag":98,"props":3742,"children":3743},{},[3744],{"type":42,"tag":152,"props":3745,"children":3746},{},[3747],{"type":47,"value":1419},{"type":42,"tag":98,"props":3749,"children":3750},{},[3751],{"type":47,"value":3752},"Detailed guidance on writing effective harnesses",{"type":42,"tag":71,"props":3754,"children":3755},{},[3756,3763],{"type":42,"tag":98,"props":3757,"children":3758},{},[3759],{"type":42,"tag":152,"props":3760,"children":3761},{},[3762],{"type":47,"value":2705},{"type":42,"tag":98,"props":3764,"children":3765},{},[3766],{"type":47,"value":3767},"Memory error detection during fuzzing",{"type":42,"tag":71,"props":3769,"children":3770},{},[3771,3778],{"type":42,"tag":98,"props":3772,"children":3773},{},[3774],{"type":42,"tag":152,"props":3775,"children":3776},{},[3777],{"type":47,"value":2712},{"type":42,"tag":98,"props":3779,"children":3780},{},[3781],{"type":47,"value":3782},"Catching undefined behavior in C extensions",{"type":42,"tag":71,"props":3784,"children":3785},{},[3786,3794],{"type":42,"tag":98,"props":3787,"children":3788},{},[3789],{"type":42,"tag":152,"props":3790,"children":3791},{},[3792],{"type":47,"value":3793},"coverage-analysis",{"type":42,"tag":98,"props":3795,"children":3796},{},[3797],{"type":47,"value":3798},"Measuring and improving code coverage",{"type":42,"tag":71,"props":3800,"children":3801},{},[3802,3809],{"type":42,"tag":98,"props":3803,"children":3804},{},[3805],{"type":42,"tag":152,"props":3806,"children":3807},{},[3808],{"type":47,"value":2228},{"type":42,"tag":98,"props":3810,"children":3811},{},[3812],{"type":47,"value":3813},"Building and managing seed corpora",{"type":42,"tag":402,"props":3815,"children":3817},{"id":3816},"related-fuzzers",[3818],{"type":47,"value":3819},"Related Fuzzers",{"type":42,"tag":63,"props":3821,"children":3822},{},[3823,3838],{"type":42,"tag":67,"props":3824,"children":3825},{},[3826],{"type":42,"tag":71,"props":3827,"children":3828},{},[3829,3833],{"type":42,"tag":75,"props":3830,"children":3831},{},[3832],{"type":47,"value":3729},{"type":42,"tag":75,"props":3834,"children":3835},{},[3836],{"type":47,"value":3837},"When to Consider",{"type":42,"tag":91,"props":3839,"children":3840},{},[3841,3857],{"type":42,"tag":71,"props":3842,"children":3843},{},[3844,3852],{"type":42,"tag":98,"props":3845,"children":3846},{},[3847],{"type":42,"tag":152,"props":3848,"children":3849},{},[3850],{"type":47,"value":3851},"hypothesis",{"type":42,"tag":98,"props":3853,"children":3854},{},[3855],{"type":47,"value":3856},"Property-based testing with type-aware generation",{"type":42,"tag":71,"props":3858,"children":3859},{},[3860,3867],{"type":42,"tag":98,"props":3861,"children":3862},{},[3863],{"type":42,"tag":152,"props":3864,"children":3865},{},[3866],{"type":47,"value":137},{"type":42,"tag":98,"props":3868,"children":3869},{},[3870],{"type":47,"value":3871},"AFL-style fuzzing for Python when Atheris isn't available",{"type":42,"tag":56,"props":3873,"children":3875},{"id":3874},"resources",[3876],{"type":47,"value":3877},"Resources",{"type":42,"tag":402,"props":3879,"children":3881},{"id":3880},"key-external-resources",[3882],{"type":47,"value":3883},"Key External Resources",{"type":42,"tag":50,"props":3885,"children":3886},{},[3887,3897],{"type":42,"tag":152,"props":3888,"children":3889},{},[3890],{"type":42,"tag":422,"props":3891,"children":3894},{"href":3892,"rel":3893},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris",[426],[3895],{"type":47,"value":3896},"Atheris GitHub Repository",{"type":47,"value":3898},"\nOfficial repository with installation instructions, examples, and documentation for fuzzing both pure Python and native extensions.",{"type":42,"tag":50,"props":3900,"children":3901},{},[3902,3912],{"type":42,"tag":152,"props":3903,"children":3904},{},[3905],{"type":42,"tag":422,"props":3906,"children":3909},{"href":3907,"rel":3908},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fatheris\u002Fblob\u002Fmaster\u002Fnative_extension_fuzzing.md",[426],[3910],{"type":47,"value":3911},"Native Extension Fuzzing Guide",{"type":47,"value":3913},"\nComprehensive guide covering compilation flags, LD_PRELOAD setup, sanitizer configuration, and troubleshooting for Python C extensions.",{"type":42,"tag":50,"props":3915,"children":3916},{},[3917,3927],{"type":42,"tag":152,"props":3918,"children":3919},{},[3920],{"type":42,"tag":422,"props":3921,"children":3924},{"href":3922,"rel":3923},"https:\u002F\u002Fblog.trailofbits.com\u002F2024\u002F02\u002F23\u002Fcontinuously-fuzzing-python-c-extensions\u002F",[426],[3925],{"type":47,"value":3926},"Continuously Fuzzing Python C Extensions",{"type":47,"value":3928},"\nTrail of Bits blog post covering CI\u002FCD integration, ClusterFuzzLite setup, and real-world examples of fuzzing Python C extensions in continuous integration pipelines.",{"type":42,"tag":50,"props":3930,"children":3931},{},[3932,3942],{"type":42,"tag":152,"props":3933,"children":3934},{},[3935],{"type":42,"tag":422,"props":3936,"children":3939},{"href":3937,"rel":3938},"https:\u002F\u002Fgoogle.github.io\u002Fclusterfuzzlite\u002Fbuild-integration\u002Fpython-lang\u002F",[426],[3940],{"type":47,"value":3941},"ClusterFuzzLite Python Integration",{"type":47,"value":3943},"\nGuide for integrating Atheris fuzzing into CI\u002FCD pipelines using ClusterFuzzLite for automated continuous fuzzing.",{"type":42,"tag":402,"props":3945,"children":3947},{"id":3946},"video-resources",[3948],{"type":47,"value":3949},"Video Resources",{"type":42,"tag":50,"props":3951,"children":3952},{},[3953],{"type":47,"value":3954},"Videos and tutorials are available in the main Atheris documentation and libFuzzer resources.",{"type":42,"tag":3956,"props":3957,"children":3958},"style",{},[3959],{"type":47,"value":3960},"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":3962,"total":4109},[3963,3977,3987,4007,4022,4035,4041,4051,4064,4075,4087,4098],{"slug":2705,"name":2705,"fn":3964,"description":3965,"org":3966,"tags":3967,"stars":23,"repoUrl":24,"updatedAt":3976},"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},[3968,3971,3974,3975],{"name":3969,"slug":3970,"type":16},"C#","c",{"name":3972,"slug":3973,"type":16},"Debugging","debugging",{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},"2026-07-17T06:05:14.925095",{"slug":3978,"name":3978,"fn":3979,"description":3980,"org":3981,"tags":3982,"stars":23,"repoUrl":24,"updatedAt":3986},"aflpp","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},[3983,3984,3985],{"name":3969,"slug":3970,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},"2026-07-17T06:05:12.433192",{"slug":3988,"name":3988,"fn":3989,"description":3990,"org":3991,"tags":3992,"stars":23,"repoUrl":24,"updatedAt":4006},"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},[3993,3996,3999,4002,4005],{"name":3994,"slug":3995,"type":16},"Agents","agents",{"name":3997,"slug":3998,"type":16},"CI\u002FCD","ci-cd",{"name":4000,"slug":4001,"type":16},"Code Analysis","code-analysis",{"name":4003,"slug":4004,"type":16},"GitHub Actions","github-actions",{"name":14,"slug":15,"type":16},"2026-07-18T05:47:48.564744",{"slug":4008,"name":4008,"fn":4009,"description":4010,"org":4011,"tags":4012,"stars":23,"repoUrl":24,"updatedAt":4021},"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},[4013,4016,4017,4018],{"name":4014,"slug":4015,"type":16},"Audit","audit",{"name":4000,"slug":4001,"type":16},{"name":14,"slug":15,"type":16},{"name":4019,"slug":4020,"type":16},"Smart Contracts","smart-contracts","2026-07-18T05:47:43.989063",{"slug":4023,"name":4023,"fn":4024,"description":4025,"org":4026,"tags":4027,"stars":23,"repoUrl":24,"updatedAt":4034},"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},[4028,4031],{"name":4029,"slug":4030,"type":16},"Engineering","engineering",{"name":4032,"slug":4033,"type":16},"Productivity","productivity","2026-07-17T06:05:33.543262",{"slug":4,"name":4,"fn":5,"description":6,"org":4036,"tags":4037,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4038,4039,4040],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"slug":4042,"name":4042,"fn":4043,"description":4044,"org":4045,"tags":4046,"stars":23,"repoUrl":24,"updatedAt":4050},"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},[4047,4048,4049],{"name":4014,"slug":4015,"type":16},{"name":4000,"slug":4001,"type":16},{"name":14,"slug":15,"type":16},"2026-08-01T05:44:54.920542",{"slug":4052,"name":4052,"fn":4053,"description":4054,"org":4055,"tags":4056,"stars":23,"repoUrl":24,"updatedAt":4063},"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},[4057,4060,4061,4062],{"name":4058,"slug":4059,"type":16},"Architecture","architecture",{"name":4014,"slug":4015,"type":16},{"name":4000,"slug":4001,"type":16},{"name":4029,"slug":4030,"type":16},"2026-07-18T05:47:40.122449",{"slug":4065,"name":4065,"fn":4066,"description":4067,"org":4068,"tags":4069,"stars":23,"repoUrl":24,"updatedAt":4074},"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},[4070,4071,4072,4073],{"name":4014,"slug":4015,"type":16},{"name":4000,"slug":4001,"type":16},{"name":4029,"slug":4030,"type":16},{"name":14,"slug":15,"type":16},"2026-07-18T05:47:39.210985",{"slug":4076,"name":4076,"fn":4077,"description":4078,"org":4079,"tags":4080,"stars":23,"repoUrl":24,"updatedAt":4086},"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},[4081,4082,4085],{"name":4014,"slug":4015,"type":16},{"name":4083,"slug":4084,"type":16},"CLI","cli",{"name":14,"slug":15,"type":16},"2026-07-17T06:05:33.198077",{"slug":4088,"name":4088,"fn":4089,"description":4090,"org":4091,"tags":4092,"stars":23,"repoUrl":24,"updatedAt":4097},"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},[4093,4094,4095,4096],{"name":4014,"slug":4015,"type":16},{"name":3969,"slug":3970,"type":16},{"name":4000,"slug":4001,"type":16},{"name":14,"slug":15,"type":16},"2026-07-17T06:05:11.333374",{"slug":4099,"name":4099,"fn":4100,"description":4101,"org":4102,"tags":4103,"stars":23,"repoUrl":24,"updatedAt":4108},"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},[4104,4105,4106,4107],{"name":4014,"slug":4015,"type":16},{"name":4000,"slug":4001,"type":16},{"name":14,"slug":15,"type":16},{"name":4019,"slug":4020,"type":16},"2026-07-18T05:47:42.84568",111,{"items":4111,"total":4157},[4112,4119,4125,4133,4140,4145,4151],{"slug":2705,"name":2705,"fn":3964,"description":3965,"org":4113,"tags":4114,"stars":23,"repoUrl":24,"updatedAt":3976},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4115,4116,4117,4118],{"name":3969,"slug":3970,"type":16},{"name":3972,"slug":3973,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"slug":3978,"name":3978,"fn":3979,"description":3980,"org":4120,"tags":4121,"stars":23,"repoUrl":24,"updatedAt":3986},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4122,4123,4124],{"name":3969,"slug":3970,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"slug":3988,"name":3988,"fn":3989,"description":3990,"org":4126,"tags":4127,"stars":23,"repoUrl":24,"updatedAt":4006},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4128,4129,4130,4131,4132],{"name":3994,"slug":3995,"type":16},{"name":3997,"slug":3998,"type":16},{"name":4000,"slug":4001,"type":16},{"name":4003,"slug":4004,"type":16},{"name":14,"slug":15,"type":16},{"slug":4008,"name":4008,"fn":4009,"description":4010,"org":4134,"tags":4135,"stars":23,"repoUrl":24,"updatedAt":4021},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4136,4137,4138,4139],{"name":4014,"slug":4015,"type":16},{"name":4000,"slug":4001,"type":16},{"name":14,"slug":15,"type":16},{"name":4019,"slug":4020,"type":16},{"slug":4023,"name":4023,"fn":4024,"description":4025,"org":4141,"tags":4142,"stars":23,"repoUrl":24,"updatedAt":4034},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4143,4144],{"name":4029,"slug":4030,"type":16},{"name":4032,"slug":4033,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":4146,"tags":4147,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4148,4149,4150],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"slug":4042,"name":4042,"fn":4043,"description":4044,"org":4152,"tags":4153,"stars":23,"repoUrl":24,"updatedAt":4050},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4154,4155,4156],{"name":4014,"slug":4015,"type":16},{"name":4000,"slug":4001,"type":16},{"name":14,"slug":15,"type":16},77]