본문으로 건너뛰기
cccskills
무료GitHub에 공개

oss-fuzz

Use when enrolling a project in OSS-Fuzz, running its helper workflow locally, or reproducing an OSS-Fuzz report. Not for remote, credential, publish, deploy, or irreversible changes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구Docker
설치 방법 보기

포함된 파일(2)

  • SKILL.md7.1 KB
  • agents/openai.yaml175 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

OSS-Fuzz

Contract

FieldBound contract
TriggerUser needs to enroll an open-source project in OSS-Fuzz, run its helper workflow locally, or reproduce an OSS-Fuzz report.
AuthorityReversible local: writes only named local artifacts (oss-fuzz clone, Docker images, project enrollment files); rollback is docker rmi for images and filesystem deletion for the clone. No remote mutation.
Side effectOSS-Fuzz project integration files, Docker image builds, and local fuzzing campaign artifacts written to the oss-fuzz working directory.
DoneTask A: the project Docker image builds, fuzzers compile with AddressSanitizer, and the named harness executes. Task B: projects/<project_name>/project.yaml, Dockerfile, and build.sh are present and structurally valid.

Inputs

InputRequiredDescription
project_nameRequiredOSS-Fuzz project identifier (slug used in infra/helper.py commands and the projects/ subdirectory).
harness_nameRequired for local runFuzzer executable name inside the project's build output directory.
languageRequired for enrollmentProject language (e.g. c++, python, rust, go).
main_repoRequired for enrollmentURL of the project's primary source repository.
sanitizerOptionalSanitizer for build_fuzzers: address (default), undefined, coverage.
fuzzer_argsOptionalExtra arguments passed through to the fuzzer binary.
oss_fuzz_dirOptionalLocal path of the cloned oss-fuzz repository; defaults to ./oss-fuzz.
primary_contactRequired for enrollmentMaintainer email for project.yaml.

Procedure

Task A: run an enrolled project locally

  1. Verify docker is available and the user has permission to run containers (docker info exits 0). Done when: docker info exits 0.
  2. Clone oss-fuzz if oss_fuzz_dir does not exist or is not a git repository:
    oss_fuzz_dir="${oss_fuzz_dir:-./oss-fuzz}"
    git clone https://github.com/google/oss-fuzz "$oss_fuzz_dir"
    
    Done when: the oss-fuzz repository is cloned and present at oss_fuzz_dir.
  3. Change to the oss-fuzz directory:
    oss_fuzz_dir="${oss_fuzz_dir:-./oss-fuzz}"
    cd "$oss_fuzz_dir"
    
    Done when: the working directory is the oss-fuzz directory.
  4. Build the project Docker image:
    project_name="${project_name:?project_name is required}"
    uv run --no-project python infra/helper.py build_image --pull "$project_name"
    
    If build_image reports the project directory does not exist under projects/, stop and return enrollment-missing. Done when: the project Docker image builds successfully or enrollment-missing is returned.
  5. Build the fuzzers with AddressSanitizer:
    project_name="${project_name:?project_name is required}"
    sanitizer="${sanitizer:-address}"
    uv run --no-project python infra/helper.py build_fuzzers --sanitizer="$sanitizer" "$project_name"
    
    Capture stdout/stderr. If the build exits non-zero, return build-failed with the captured output. Done when: fuzzers compile with the configured sanitizer and stdout/stderr are captured.
  6. Run the named harness:
    project_name="${project_name:?project_name is required}"
    harness_name="${harness_name:?harness_name is required}"
    fuzzer_args="${fuzzer_args:-}"
    uv run --no-project python infra/helper.py run_fuzzer "$project_name" "$harness_name" ${fuzzer_args:+"$fuzzer_args"}
    
    Observe for at least 10 seconds. If the harness exits with a sanitizer report, return crash-detected with the report path. Otherwise return harness-ran. Done when: the harness runs for at least 10 seconds and returns harness-ran or crash-detected.

Task B: enroll a new project

  1. Verify the project has an OSS-Fuzz-compatible harness at $main_repo or an associated harness repository. Done when: a compatible harness is confirmed at $main_repo or the associated repository.
  2. Create projects/<project_name>/ under the oss-fuzz directory. Done when: the project directory is created.
  3. Write projects/<project_name>/project.yaml:
    homepage: "<main_repo>"
    language: "<language>"
    primary_contact: "<primary_contact>"
    main_repo: "<main_repo>"
    fuzzing_engines:
      - libfuzzer
    sanitizers:
      - address
    
    Extend sanitizers and fuzzing_engines if the task specifies additional values. Done when: project.yaml is written with all required fields and any extensions.
  4. Write projects/<project_name>/Dockerfile using gcr.io/oss-fuzz-base/base-builder as the base image; add language-specific and project-specific RUN commands to install build dependencies. Do not copy source code directly; use git clone in the Dockerfile. Done when: Dockerfile is written with the base image and git clone for source.
  5. Write projects/<project_name>/build.sh as an executable script:
    • Set #!/bin/bash -eu.
    • Clone or build project dependencies.
    • Compile harnesses using $CXX, $CXXFLAGS, $LIB_FUZZING_ENGINE, $SRC, and $OUT as provided by the OSS-Fuzz environment.
    • Copy corpus and dictionary files to $OUT if present. Done when: build.sh is written as an executable script with all four elements.
  6. Return enrollment-artifacts-written listing the three files and their paths. Done when: the three artifact paths are returned.

Failure and recovery

Failure classTriggerResult
docker-unavailabledocker info exits non-zeroReturn blocked: docker-unavailable. Do not attempt container operations.
enrollment-missingprojects/<project_name> absent and task is local runReturn blocked: enrollment-missing. Enrollment is out of scope for local-run unless explicitly requested.
build-failedbuild_fuzzers exits non-zeroReturn failed: build-failed with captured stderr. Do not proceed to run step.
crash-detectedHarness exits with ASan/UBSan reportReturn crash-detected with the report file path. Do not suppress or dismiss the report.
rollbackAny step fails; Docker images written by this sessionRollback: docker rmi $(docker images --filter=reference="gcr.io/oss-fuzz/$(basename "$project_name")*" -q) 2>/dev/null; delete the oss_fuzz_dir clone if this session created it.

Output

OutcomeOutput
Local run, build success, no crashdone: harness-ran: fuzzer is running and producing coverage or execution output.
Local run, crash detectedcrash-detected: <report-path>: sanitizer report written to the build output directory.
Enrollment artifacts writtendone: enrollment-artifacts-written: project.yaml, Dockerfile, build.sh paths listed.
Build failedfailed: build-failed: full build log for diagnosis.
Prerequisites not metblocked: <failure-class>: reason stated, no progress claimed.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

OutlineDriven/odin-claude-plugin372026년 9월 29일 업데이트

Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

OutlineDriven/odin-claude-plugin372026년 9월 29일 업데이트

af-xdp

무료

Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

OutlineDriven/odin-claude-plugin372026년 9월 29일 업데이트

Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

OutlineDriven/odin-claude-plugin372026년 9월 29일 업데이트

Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

OutlineDriven/odin-claude-plugin372026년 9월 29일 업데이트

agents-md

무료

Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

OutlineDriven/odin-claude-plugin372026년 9월 29일 업데이트

OutlineDriven의 스킬 모두 보기

이 스킬의 문제 신고