BigPizzaV3/CodexPlusPlus · error

Dream Skin 主题包为空

Error message

Dream Skin 主题包为空

What it means

Completeness guard in normalize_package_entries: after filtering out directory placeholders and skipped entries (.DS_Store, __MACOSX), no file has actual content. The archive effectively contains nothing usable.

Source

Thrown at crates/codex-plus-core/src/dream_skin_package.rs:840

        || name.contains(['\0', ':'])
        || name.split('/').any(|part| part == "." || part == "..")
        || (!name.starts_with("__MACOSX/")
            && name.split('/').filter(|part| !part.is_empty()).count() > 2)
    {
        bail!("主题包文件名不安全:{name}");
    }
    Ok(())
}

fn normalize_package_entries(
    entries: Vec<(String, Option<Vec<u8>>)>,
) -> anyhow::Result<std::collections::BTreeMap<String, Vec<u8>>> {
    let content_entries = entries
        .into_iter()
        .filter_map(|(name, content)| content.map(|content| (name, content)))
        .collect::<Vec<_>>();
    if content_entries.is_empty() {
        bail!("Dream Skin 主题包为空");
    }

    let root_files = content_entries.iter().any(|(name, _)| !name.contains('/'));
    let prefix = if root_files {
        if content_entries.iter().any(|(name, _)| name.contains('/')) {
            bail!("主题包文件必须全部位于根目录或唯一一层主题目录");
        }
        None
    } else {
        let prefix = content_entries[0]
            .0
            .split_once('/')
            .map(|(prefix, _)| prefix)
            .context("主题包顶级目录无效")?;
        if prefix.is_empty()
            || content_entries.iter().any(|(name, _)| {
                name.split_once('/').is_none_or(|(candidate, file)| {
                    candidate != prefix || file.is_empty() || file.contains('/')

View on GitHub (pinned to f2074595a2)

Solutions

  1. Rebuild the package with real content files
  2. Ensure required files (manifest.json, theme.json, theme.css, image) are included with content
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/codex-plus-core/src/dream_skin_package.rs:840 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BigPizzaV3/CodexPlusPlus@f2074595a2 (2026-08-23). Data as JSON: /api/errors/bdddb0206d388a39. Report an issue: GitHub.