{"record":{"id":"db103f8e8d0c19bd","repo":"BigPizzaV3/CodexPlusPlus","slug":"dream-skin-64-mib","errorCode":null,"errorMessage":"Dream Skin 主题包解包后超过 64 MiB 限制","messagePattern":"Dream Skin 主题包解包后超过 64 MiB 限制","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_package.rs","lineNumber":133,"sourceCode":"        let base_name = name.rsplit('/').next().unwrap_or_default();\n        if base_name == \".DS_Store\" || name.starts_with(\"__MACOSX/\") {\n            entries.push((name, None));\n            continue;\n        }\n        if !ALLOWED_FILES.contains(&base_name) {\n            bail!(\"主题包包含不支持的文件：{name}\");\n        }\n        let limit = file_limit(base_name);\n        let mut content = Vec::new();\n        file.take((limit + 1) as u64)\n            .read_to_end(&mut content)\n            .context(\"读取 Dream Skin ZIP 内容失败\")?;\n        if content.is_empty() || content.len() > limit {\n            bail!(\"主题包文件 {name} 超过大小限制\");\n        }\n        unpacked = unpacked.saturating_add(content.len());\n        if unpacked > UNPACKED_LIMIT {\n            bail!(\"Dream Skin 主题包解包后超过 64 MiB 限制\");\n        }\n        entries.push((name, Some(content)));\n    }\n\n    let mut files = normalize_package_entries(entries)?;\n\n    let manifest_bytes = files\n        .remove(\"manifest.json\")\n        .context(\"主题包缺少 manifest.json\")?;\n    let theme_bytes = files\n        .remove(\"theme.json\")\n        .context(\"主题包缺少 theme.json\")?;\n    let css_bytes = files.remove(\"theme.css\").context(\"主题包缺少 theme.css\")?;\n    let image_name = [\"background.webp\", \"background.jpg\", \"background.png\"]\n        .iter()\n        .find(|name| files.contains_key(**name))\n        .map(|name| (*name).to_string())\n        .context(\"主题包必须包含一个背景图片\")?;","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_package.rs#L115-L151","documentation":"Zip-bomb guard in validate_and_read_package: the total bytes of all unpacked entries exceed 64 MiB. Even if the ZIP itself is under 32 MiB, a highly compressible archive could expand enormously; cumulative unpacked size is tracked and capped.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_package.rs:133 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rebuild the package so unpacked content totals under 64 MiB","Remove or compress oversized assets in the ZIP"],"exampleFix":null,"handlingStrategy":"validation","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"}