rust/fuzz (cargo-fuzz, nightly, its own workspace with the same IronRDP patches) has targets for the Telnet IAC parser, the IRC parser + state machine + mIRC formatter, VNC framebuffer updates and decoders, ~/.ssh/config parsing and the update manifest. They reach the private parsers through hidden entry points behind nexus-core's 'fuzzing' feature. A nightly workflow runs each for two minutes and uploads any crashing input. A first 45 s run of each locally found nothing.
33 lines
1.0 KiB
YAML
33 lines
1.0 KiB
YAML
name: Fuzz
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "17 3 * * *"
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
fuzz:
|
|
name: Fuzz (${{ matrix.target }})
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target: [telnet, irc, vnc, sshconfig, updater]
|
|
defaults:
|
|
run:
|
|
working-directory: rust/fuzz
|
|
steps:
|
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
- run: rustup toolchain install nightly --profile minimal
|
|
- run: cargo +nightly install cargo-fuzz --locked
|
|
- run: cargo +nightly fuzz run ${{ matrix.target }} -- -max_total_time=120 -rss_limit_mb=2048
|
|
- name: Upload crashing inputs
|
|
if: failure()
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: fuzz-${{ matrix.target }}
|
|
path: rust/fuzz/artifacts
|