From 5dfe7cb2168ac7ffc16aae5127f227599db283c6 Mon Sep 17 00:00:00 2001 From: zhom <2717306+zhom@users.noreply.github.com> Date: Wed, 18 Feb 2026 09:40:45 +0400 Subject: [PATCH] fix: download zip instead of exe --- src-tauri/src/browser.rs | 20 ++++++++++++++++++-- src-tauri/src/browser_version_manager.rs | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/browser.rs b/src-tauri/src/browser.rs index 6919af2..194f1ba 100644 --- a/src-tauri/src/browser.rs +++ b/src-tauri/src/browser.rs @@ -612,7 +612,7 @@ mod windows { if let Ok(entries) = std::fs::read_dir(install_dir) { for entry in entries.flatten() { let path = entry.path(); - if path.extension().is_some_and(|ext| ext == "exe") { + if path.extension().is_some_and(|ext| ext == "exe") && is_pe_executable(&path) { let name = path .file_stem() .unwrap_or_default() @@ -716,7 +716,7 @@ mod windows { for entry in entries.flatten() { let path = entry.path(); - if path.extension().is_some_and(|ext| ext == "exe") { + if path.extension().is_some_and(|ext| ext == "exe") && is_pe_executable(&path) { let name = path .file_stem() .unwrap_or_default() @@ -1185,6 +1185,22 @@ impl BrowserFactory { } } +/// Check if a file is a valid PE executable by reading its magic bytes (MZ). +/// Returns false for archive files (.zip starts with PK, etc.) that were +/// incorrectly named with a .exe extension. +#[cfg(target_os = "windows")] +fn is_pe_executable(path: &Path) -> bool { + use std::io::Read; + let Ok(mut file) = std::fs::File::open(path) else { + return false; + }; + let mut magic = [0u8; 2]; + if file.read_exact(&mut magic).is_err() { + return false; + } + magic == [0x4D, 0x5A] // MZ +} + // Factory function to create browser instances (kept for backward compatibility) pub fn create_browser(browser_type: BrowserType) -> Box { BrowserFactory::instance().create_browser(browser_type) diff --git a/src-tauri/src/browser_version_manager.rs b/src-tauri/src/browser_version_manager.rs index 8a68277..23893dc 100644 --- a/src-tauri/src/browser_version_manager.rs +++ b/src-tauri/src/browser_version_manager.rs @@ -685,7 +685,7 @@ impl BrowserVersionManager { "macos-arm64" | "macos-x64" => (format!("wayfern-{version}-{platform_key}.dmg"), true), "linux-x64" | "linux-arm64" => (format!("wayfern-{version}-{platform_key}.tar.xz"), true), "windows-x64" | "windows-arm64" => { - (format!("wayfern-{version}-{platform_key}.exe"), false) + (format!("wayfern-{version}-{platform_key}.zip"), true) } _ => { return Err(