{"record":{"id":"2bb3ac23942da785","repo":"BigPizzaV3/CodexPlusPlus","slug":"error-2bb3ac","errorCode":null,"errorMessage":"主题市场缓存超过大小限制","messagePattern":"主题市场缓存超过大小限制","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_market.rs","lineNumber":294,"sourceCode":"        bytes.extend_from_slice(&chunk);\n    }\n    if bytes.is_empty() {\n        bail!(\"下载内容为空\");\n    }\n    Ok(bytes)\n}\n\nfn cache_manifest(state_dir: &Path, manifest: &DreamSkinMarketManifest) -> anyhow::Result<()> {\n    let bytes = serde_json::to_vec_pretty(manifest)?;\n    crate::settings::atomic_write(&state_dir.join(MARKET_CACHE_FILE), &bytes)\n}\n\nfn read_cached_manifest(state_dir: &Path) -> anyhow::Result<DreamSkinMarketManifest> {\n    let path = state_dir.join(MARKET_CACHE_FILE);\n    let metadata = std::fs::metadata(&path)\n        .with_context(|| format!(\"主题市场缓存不存在：{}\", path.display()))?;\n    if metadata.len() > MARKET_INDEX_LIMIT as u64 {\n        bail!(\"主题市场缓存超过大小限制\");\n    }\n    let mut manifest: DreamSkinMarketManifest =\n        serde_json::from_slice(&std::fs::read(&path)?).context(\"主题市场缓存不是有效 JSON\")?;\n    validate_manifest(&mut manifest)?;\n    Ok(manifest)\n}\n\nfn read_install_records(state_dir: &Path) -> anyhow::Result<MarketInstallRecords> {\n    let path = state_dir.join(MARKET_INSTALLS_FILE);\n    if !path.is_file() {\n        return Ok(MarketInstallRecords {\n            schema_version: market_schema_version(),\n            themes: BTreeMap::new(),\n        });\n    }\n    let records: MarketInstallRecords = serde_json::from_slice(&std::fs::read(path)?)?;\n    if records.schema_version != market_schema_version() {\n        bail!(\"不支持的主题市场安装记录版本\");","sourceCodeStart":276,"sourceCodeEnd":312,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_market.rs#L276-L312","documentation":"Size-limit guard in read_cached_manifest: the on-disk market cache file is larger than the allowed cap, so it is not even parsed. An oversized cache indicates corruption or tampering; the cache should be discarded and refetched.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_market.rs:294 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Delete the market cache file so the next load fetches a fresh manifest","Check disk for corruption or unexpected writes to the cache path"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f2074595a281bc057525c748175c8eb9805b0673","analyzedAt":"2026-08-23T12:52:24.489Z","contentChangedAt":"2026-08-23T12:52:24.489Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}