{"record":{"id":"ec16d87ff6f3768b","repo":"denoland/deno","slug":"malformed-msi-no-stringpool-stream","errorCode":null,"errorMessage":"malformed .msi: no _StringPool stream","messagePattern":"malformed \\.msi: no _StringPool stream","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/desktop.rs","lineNumber":4938,"sourceCode":"  let write_stream = |comp: &mut cfb::CompoundFile<std::fs::File>,\n                      raw: &str,\n                      bytes: &[u8]|\n   -> Result<(), AnyError> {\n    let mut s = comp.open_stream(format!(\"/{raw}\"))?;\n    s.write_all(bytes)?;\n    Ok(())\n  };\n  let find_raw = |suffix: &str| -> Option<String> {\n    names\n      .iter()\n      .find(|n| msi_demangle_stream_name(n).ends_with(suffix))\n      .cloned()\n  };\n\n  // The string-pool header's top bit selects 3-byte string references; tiny\n  // databases use 2-byte refs, but honor the flag to stay correct at any size.\n  let pool_raw = find_raw(\"_StringPool\").ok_or_else(|| {\n    deno_core::anyhow::anyhow!(\"malformed .msi: no _StringPool stream\")\n  })?;\n  let pool = read_stream(&mut comp, &pool_raw)?;\n  let str_w: usize = if pool.len() >= 4 && (pool[3] & 0x80) != 0 {\n    3\n  } else {\n    2\n  };\n\n  // Map every string-pool id to its text so data-table streams (named by table\n  // text) can be matched to their column schema (keyed by table string id).\n  let data_raw = find_raw(\"_StringData\").ok_or_else(|| {\n    deno_core::anyhow::anyhow!(\"malformed .msi: no _StringData stream\")\n  })?;\n  let str_data = read_stream(&mut comp, &data_raw)?;\n  let mut strings = vec![String::new()]; // 1-based; index 0 is unused.\n  {\n    let mut off = 0usize;\n    let mut i = 4;","sourceCodeStart":4920,"sourceCodeEnd":4956,"githubUrl":"https://github.com/denoland/deno/blob/89f33cbef296a2b287f323d42de54c871fa69c77/cli/tools/desktop.rs#L4920-L4956","documentation":"Error \"malformed .msi: no _StringPool stream\" thrown in denoland/deno.","triggerScenarios":"Thrown at cli/tools/desktop.rs:4938 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"89f33cbef296a2b287f323d42de54c871fa69c77","analyzedAt":"2026-08-16T07:54:21.310Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}