From 26b1552af52b789d6d163d5da8f7bdf4779aa91a Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 31 Jan 2026 17:22:54 +0000 Subject: [PATCH] feat: add fuzz testing harnesses for schemas, dm, and magnet utils - Harmonize fuzzing iteration counts to 50,000 for robustness - Add documentation headers to fuzz scripts - Verify robustness of `nostrEventSchemas.js`, `dmDecryptor.js`, and `magnetUtils.js` - Clean up temporary reproducers and crash reports Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- scripts/agent/fuzz-dmDecryptor.mjs | 14 ++++++++++++-- scripts/agent/fuzz-magnetUtils.mjs | 14 ++++++++++++-- scripts/agent/fuzz-nostrEventSchemas.mjs | 17 ++++++++++++++--- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/scripts/agent/fuzz-dmDecryptor.mjs b/scripts/agent/fuzz-dmDecryptor.mjs index 8129c88e..f2787116 100644 --- a/scripts/agent/fuzz-dmDecryptor.mjs +++ b/scripts/agent/fuzz-dmDecryptor.mjs @@ -1,4 +1,14 @@ -// Fuzz harness for js/dmDecryptor.js +/** + * Fuzz harness for js/dmDecryptor.js + * + * Targets: + * - decryptDM function + * + * Strategy: + * - Mocks decryptor context with random behaviors (success/fail/garbage). + * - Passes random event structures (NIP-04, NIP-44, Gift Wrap). + * - Checks for unhandled exceptions during decryption flow. + */ import "./setup-test-env.js"; import { Fuzzer } from "./fuzz-lib.mjs"; import { decryptDM } from "../../js/dmDecryptor.js"; @@ -83,4 +93,4 @@ async function fuzzTest(fuzzer, state) { } } -fuzzer.runFuzzLoop(5000, fuzzTest).catch(console.error); +fuzzer.runFuzzLoop(50000, fuzzTest).catch(console.error); diff --git a/scripts/agent/fuzz-magnetUtils.mjs b/scripts/agent/fuzz-magnetUtils.mjs index ad33d369..75a4af1b 100644 --- a/scripts/agent/fuzz-magnetUtils.mjs +++ b/scripts/agent/fuzz-magnetUtils.mjs @@ -1,4 +1,14 @@ -// Fuzz harness for js/magnetUtils.js +/** + * Fuzz harness for js/magnetUtils.js + * + * Targets: + * - normalizeAndAugmentMagnet + * + * Strategy: + * - Generates malformed magnet URIs and random strings. + * - Fuzzes options object (trackers, webseeds). + * - Checks for parsing crashes. + */ import "./setup-test-env.js"; import { Fuzzer } from "./fuzz-lib.mjs"; import { normalizeAndAugmentMagnet } from "../../js/magnetUtils.js"; @@ -42,4 +52,4 @@ async function fuzzTest(fuzzer, state) { } } -fuzzer.runFuzzLoop(5000, fuzzTest).catch(console.error); +fuzzer.runFuzzLoop(50000, fuzzTest).catch(console.error); diff --git a/scripts/agent/fuzz-nostrEventSchemas.mjs b/scripts/agent/fuzz-nostrEventSchemas.mjs index 7b9f3e0a..81da9970 100644 --- a/scripts/agent/fuzz-nostrEventSchemas.mjs +++ b/scripts/agent/fuzz-nostrEventSchemas.mjs @@ -1,4 +1,15 @@ -// Fuzz harness for js/nostrEventSchemas.js +/** + * Fuzz harness for js/nostrEventSchemas.js + * + * Targets: + * - Builder functions (buildVideoPostEvent, etc.) + * - Validation logic (validateEventStructure) + * + * Strategy: + * - Generates random JSON parameters for builders. + * - Generates random events for validation. + * - Checks for runtime exceptions (crashes). + */ import "./setup-test-env.js"; import { Fuzzer } from "./fuzz-lib.mjs"; import * as schemas from "../../js/nostrEventSchemas.js"; @@ -77,5 +88,5 @@ async function fuzzTest(fuzzer, state) { } } -// Run for 5000 iterations -fuzzer.runFuzzLoop(5000, fuzzTest).catch(console.error); +// Run for 50000 iterations +fuzzer.runFuzzLoop(50000, fuzzTest).catch(console.error);