{"record":{"id":"9a8b32c16f99ce11","repo":"tauri-apps/tauri","slug":"failed-to-convert-zip-path-to-string","errorCode":null,"errorMessage":"failed to convert zip_path to string","messagePattern":"failed to convert zip_path to string","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tauri-macos-sign/src/lib.rs","lineNumber":161,"sourceCode":"  let bundle_stem = app_bundle_path\n    .file_stem()\n    .expect(\"failed to get bundle filename\");\n\n  let tmp_dir = tempfile::tempdir().map_err(Error::TempDir)?;\n  let zip_path = tmp_dir\n    .path()\n    .join(format!(\"{}.zip\", bundle_stem.to_string_lossy()));\n  let zip_args = vec![\n    \"-c\",\n    \"-k\",\n    \"--keepParent\",\n    \"--sequesterRsrc\",\n    app_bundle_path\n      .to_str()\n      .expect(\"failed to convert bundle_path to string\"),\n    zip_path\n      .to_str()\n      .expect(\"failed to convert zip_path to string\"),\n  ];\n\n  // use ditto to create a PKZip almost identical to Finder\n  // this remove almost 99% of false alarm in notarization\n  assert_command(\n    Command::new(\"ditto\").args(zip_args).piped(),\n    \"failed to zip app with ditto\",\n  )\n  .map_err(|error| Error::CommandFailed {\n    command: \"ditto\".to_string(),\n    error,\n  })?;\n\n  // sign the zip file\n  keychain.sign(&zip_path, None, false)?;\n\n  let mut notarize_args = vec![\n    \"notarytool\",","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/tauri-apps/tauri/blob/460ec35447493200d64290dd7f015d5a91d0fd58/crates/tauri-macos-sign/src/lib.rs#L143-L179","documentation":"This panic fires in notarize_inner when zip_path.to_str() returns None. zip_path is built as tempdir/<bundle_stem>.zip; conversion to &str fails only if the temporary directory path contains non-UTF-8 bytes. The path is needed as a command-line argument for ditto.","triggerScenarios":"Calling notarize/notarize_without_stapling on a system where TMPDIR resolves to a non-UTF-8 path, making the tempfile-created zip path unrepresentable as &str.","commonSituations":"Non-standard TMPDIR environment variables set to paths with non-UTF-8 bytes in CI containers or exotic setups.","solutions":["Ensure TMPDIR points to a valid UTF-8 path before running the notarization","Unset or correct a misconfigured TMPDIR env var","Use a default temp location like /tmp if a custom one is problematic"],"exampleFix":"// before\nexport TMPDIR=$'\\xff\\xfe/tmp'\ncargo tauri build\n// after\nunset TMPDIR   # or set TMPDIR=/tmp\ncargo tauri build","handlingStrategy":"validation","validationCode":"if let Some(tmp) = std::env::var_os(\"TMPDIR\") {\n    assert!(Path::new(&tmp).to_str().is_some(), \"TMPDIR must be UTF-8\");\n}","typeGuard":"fn is_utf8_env(key: &str) -> bool {\n    std::env::var_os(key).map(|v| v.to_str().is_some()).unwrap_or(true)\n}","tryCatchPattern":null,"preventionTips":["Do not set TMPDIR to paths with unusual bytes in CI","Prefer default /tmp for packaging steps","Audit container env for byte-level path values"],"tags":["macos","notarization","utf-8","tempdir"],"backgroundTag":"invalid-argument-format","analyzedSha":"460ec35447493200d64290dd7f015d5a91d0fd58","analyzedAt":"2026-09-18T23:55:51.277Z","contentChangedAt":"2026-09-18T23:55:51.277Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}