Prompt file imported from xsscx/research (
.github/prompts/image-fuzzer-quality.prompt.md). Copyright stays with the author.
Image Fuzzer Output Quality Analysis
Context
xnuimagefuzzer generates fuzzed images via 15 CGBitmapContext configurations and 22+ output formats (PNG, JPEG, TIFFx5, GIF, BMP, HEIF/HEIC, WebP, JP2, DNG, TGA, ASTC, KTX, PDF, ICNS, EXR, plus ICC variant outputs). Quality analysis validates that outputs have sufficient visual diversity for effective fuzzing.
Expected Output
Each --pipeline run produces images across 4 phases:
- Clean: 15 contexts x base formats = ~90 files
- Format: 15 contexts x 22+ multi-format outputs = ~330 files
- Fuzz: 15 contexts x 8 mutation strategies x format outputs = ~2,000+ files
- ICC: Up to 4 ICC variants per TIFF/PNG save (real, stripped, mismatched, mutated)
- Combo: Combined mutation + ICC + multi-format
Total output per full run: 2,000+ images (varies by FUZZ_ICC_DIR availability).
Quality Metrics
- File validity -- Each output must be a valid image file (not truncated/empty)
- Dimension diversity -- Mix of sizes from 16x16 to 512x512 (minimum 16x16 enforced)
- Color diversity -- Each image should have >=5 unique pixel values
- Format coverage -- All major output formats present (PNG, JPEG, TIFF, GIF, BMP, HEIF minimum)
- No duplicates -- SHA256 dedup shows 0% duplicate rate
- No crashes -- Zero ASAN/UBSAN errors during generation
- ICC variant coverage -- Stripped, mismatched, real ICC, and mutated ICC variants present
- TIFF subformat diversity -- Uncompressed, LZW, PackBits, JPEG-in-TIFF, Deflate present
Scoring (target: 90+/100)
- 30 pts: File validity (all files parse as valid images)
- 15 pts: Dimension diversity (>=5 distinct sizes)
- 15 pts: Color diversity (>=80% files have >=5 unique colors)
- 15 pts: Format coverage (>=10 distinct formats present)
- 10 pts: ICC variant coverage (all 4 types present)
- 10 pts: No duplicates
- 5 pts: TIFF subformat diversity (>=3 compression types)
Known Limitations
- 32BitFloat and HDR float variants produce near-black images (float->8-bit clamping)
- 1BitMonochrome may not generate on macOS 15 (CGBitmapContext returns NULL)
- Structure-aware mutations add PNG chunk-level corruption (IHDR, PLTE, tRNS, sRGB, gAMA, cHRM)
- HEIF/HEIC requires hardware encoder (may not be available in CI)
- ICC real/mutated variants require
FUZZ_ICC_DIRenvironment variable
Analysis Steps
- Download fuzzed-images artifact from CI
- Count files per format:
find . -name "*.png" | wc -l(repeat for jpg, gif, bmp, tiff, heif, webp, jp2, etc.) - Validate with:
file -b "$f"-- should report image type, not "data" - Check dimensions:
identify "$f"orexiftool -ImageWidth -ImageHeight "$f"orsips -g pixelWidth -g pixelHeight "$f" - Check color diversity:
convert "$f" -unique-colors -format "%c" histogram:info: - Check ICC variants:
find . -name "*icc*" -o -name "*no_icc*" -o -name "*mismatch*" | wc -l - Check TIFF compression:
tiffinfo "$f" | grep Compressionfor each TIFF variant - Compute score against the 8 metrics above
See Also
- mac-catalyst-ci.prompt.md -- Mac Catalyst CI debugging
- improve-fuzzer-coverage.prompt.md -- Coverage gap analysis
- corpus-management.prompt.md -- Corpus storage operations