Exploring the Dataset¶
All commands are run from the project root (syzfix/).
Requires Option B from reproducing.md — the processed data must be present locally in dataset/data/processed/.
First-time setup: build the index¶
list and search use a lightweight index (~4 MB) instead of loading all 11 GB
of processed data on every call. Build it once after restoring or collecting data:
python -m dataset.view build-index
# → Building index from 6947 bug files...
# → Index written to dataset/data/index.jsonl (6947 bugs)
# → Done: 6947 bugs indexed in 48s (4071KB)
Re-run this command whenever new bugs are collected to keep the index current.
Browse the bug list¶
# List all bugs — V=patch versions, P=has patch, R=has C reproducer, D=has discussion
python -m dataset.view list
# Only bugs with a C reproducer (needed for crash reproduction)
python -m dataset.view list --has-reproducer
python -m dataset.view list -r # short flag
# Only bugs with patch iteration history (v1 → v2+)
python -m dataset.view list --has-evolution
# Filter by keyword in title
python -m dataset.view list --subsystem net -n 20
python -m dataset.view list --subsystem fs
# Combine filters
python -m dataset.view list --has-reproducer --has-evolution --subsystem net
# Force a rebuild of the index before listing
python -m dataset.view list --rebuild-index
Inspect a single bug¶
# Full lifecycle: crash → patches → discussion → fix commit
python -m dataset.view show <bug_id>
# Individual sections
python -m dataset.view crash <bug_id> # kernel crash report + C reproducer
python -m dataset.view patch <bug_id> # final merged patch
python -m dataset.view patch <bug_id> --version 1 # specific patch version
python -m dataset.view discuss <bug_id> # full email review thread
python -m dataset.view discuss <bug_id> -v 2 # only v2 discussion
python -m dataset.view diff <bug_id> # v1 → v2 → … side-by-side diff
Search and discover¶
# Fast search across titles and crash report summaries (uses index, <0.1s)
python -m dataset.view search "use-after-free"
python -m dataset.view search "null pointer"
# Restrict to bugs with a C reproducer
python -m dataset.view search "use-after-free" --has-reproducer
python -m dataset.view search "use-after-free" -r
# Deep search: scan full crash reports (slow — loads all files)
python -m dataset.view search "filemap_read_folio" --deep
# Jump to a random bug
python -m dataset.view random
Fast vs deep search: the default fast search matches against the bug title and the first 300 characters of the crash report. Use
--deepif you need to search the full crash report text.
Example session¶
# Find reproducible UAF bugs with patch evolution in networking
python -m dataset.view list --has-reproducer --has-evolution --subsystem net -n 10
# Pick a bug_id from the output, e.g. ea1cd4aa4d1e98458a55
python -m dataset.view show ea1cd4aa4d1e98458a55
# Inspect the v1 → v2 diff to see what reviewers changed
python -m dataset.view diff ea1cd4aa4d1e98458a55
# Read the review thread that drove the revision
python -m dataset.view discuss ea1cd4aa4d1e98458a55 -v 1
# Reproduce the crash (evaluation harness in the syzfix-research repo)
python evaluation/reproduce_crash.py ea1cd4aa4d1e98458a55