{"record":{"id":"d30d14de8c30f897","repo":"oven-sh/bun","slug":"invalidadvisoriesformat","errorCode":null,"errorMessage":"InvalidAdvisoriesFormat","messagePattern":"InvalidAdvisoriesFormat","errorType":"exception","errorClass":"bun_install::Error","httpStatus":null,"severity":"error","filePath":"src/install/error.rs","lineNumber":125,"sourceCode":"    #[error(\"UnknownErrorCode\")]\n    UnknownErrorCode,\n    #[error(\"SecurityScannerNotFound\")]\n    SecurityScannerNotFound,\n    #[error(\"SecurityScannerNotInDependencies\")]\n    SecurityScannerNotInDependencies,\n    #[error(\"InvalidScannerVersion\")]\n    InvalidScannerVersion,\n    #[error(\"ScannerFailed\")]\n    ScannerFailed,\n    #[error(\"UnknownMessageType\")]\n    UnknownMessageType,\n    #[error(\"MissingAdvisoriesField\")]\n    MissingAdvisoriesField,\n    #[error(\"SecurityScannerFailed\")]\n    SecurityScannerFailed,\n    #[error(\"SecurityScannerTerminated\")]\n    SecurityScannerTerminated,\n    #[error(\"InvalidAdvisoriesFormat\")]\n    InvalidAdvisoriesFormat,\n    #[error(\"InvalidAdvisoryFormat\")]\n    InvalidAdvisoryFormat,\n    #[error(\"MissingPackageField\")]\n    MissingPackageField,\n    #[error(\"InvalidPackageField\")]\n    InvalidPackageField,\n    #[error(\"EmptyPackageField\")]\n    EmptyPackageField,\n    #[error(\"InvalidDescriptionField\")]\n    InvalidDescriptionField,\n    #[error(\"InvalidUrlField\")]\n    InvalidUrlField,\n    #[error(\"MissingLevelField\")]\n    MissingLevelField,\n    #[error(\"InvalidLevelField\")]\n    InvalidLevelField,\n    #[error(\"InvalidLevelValue\")]","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/oven-sh/bun/blob/8c5296ac459e8252d3cd702f3fbcbb0c249d95d5/src/install/error.rs#L107-L143","documentation":"In the scanner's result message, the top-level `advisories` field is present but is not a JSON array (security_scanner.rs:1808-1813). The parser requires an array even when empty; objects, strings, or null are rejected and the actual received type tag is printed.","triggerScenarios":"Scanner sends \"advisories\": {...} (an object/map keyed by package), \"advisories\": null when there is nothing to report, or a string summary instead of the array.","commonSituations":"Scanner authors modeling advisories as a map for deduplication; returning null as a 'clean' sentinel; partially refactored output code.","solutions":["Emit a JSON array: \"advisories\": [] for clean scans, \"advisories\":[{...},{...}] otherwise","Convert map-shaped results with Object.values(advisoryMap) before serializing","Never null — use an empty array"],"exampleFix":"// before\nsend({ type: \"result\", advisories: null });\n\n// after\nsend({ type: \"result\", advisories: [] });","handlingStrategy":"type-guard","validationCode":"// scanner-side: normalize before sending\nconst advisories = Array.isArray(raw?.advisories) ? raw.advisories : Object.values(raw?.advisories ?? {});","typeGuard":"const isValidAdvisories = (v) => Array.isArray(v);","tryCatchPattern":null,"preventionTips":["Always serialize an array — use Object.values() if your internal model is a map","Replace null sentinels for 'clean' with []","Validate the outgoing payload shape in scanner unit tests"],"tags":["security-scanner","json","schema","advisories"],"backgroundTag":null,"analyzedSha":"8c5296ac459e8252d3cd702f3fbcbb0c249d95d5","analyzedAt":"2026-08-16T08:01:58.794Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}