live · scanning repos
Scanrepo
github.com
github.com / WilliamVenner

WilliamVenner/gmpublisher

Rust·240 files·commit 0f0e4e4·scanned 3d ago·cached ✓
25/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.

score capped at 25 — 1,263 stars — findings likely legitimate code patterns

verdict accurate?
27% file coverage
Desktop app detected
threat-state: lowlive

FINDINGS ░▒▓

criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.src-tauri/src/cli.rs

	let command = Command::new("gmpublisher");

	let matches = command
+8
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.src-tauri/src/content_generator.rs
pub fn get_content_generator_manifests() -> &'static Vec<AddWorkshopManifest> {
	unsafe { &*(&CONTENT_GENERATOR.lock().saved as *const _) }
}
+3
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.src-tauri/src/game_addons.rs
	fn from(n: u8) -> Self {
		unsafe { std::mem::transmute(n) }
	}
}
+3
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.src-tauri/src/gma/extract.rs
				while !complete_ref.load(Ordering::Acquire) {
					let xz_decoder = unsafe { &mut *xz_decoder_ptr.0 };

					let bytes_read = xz_decoder.total_in() as f64;
+3
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.src-tauri/src/util/path.rs
		#[cfg(target_os = "windows")]
		return std::process::Command::new("explorer").arg(format!("/select,{}", path.display())).spawn();

		#[cfg(target_os = "macos")]
+8
infoSuspicious files are not reachable from entry pointsFlagged files exist but are not imported by any entry point. They may be dead code, tests, or attack payloads triggered by another mechanism.+2
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.public/js/lib/prism.min.js+3
infoSuspicious file in repoVery large source file (595KB) — could contain obfuscated payloadsrc-tauri/lib/steam_api/public/steam/steam_api.json+2

Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.

65 files scanned @ 0f0e4e4 | 10/26/2026 | heuristic scan — always review manually

risk by category
code execution25
network & exfiltration0
file system access0
obfuscation3
supply chain2
owasp / injection0
telemetry
files 65/240rules hit 8engine v7commit 0f0e4e4

github

WilliamVenner/gmpublisher

⚙️ Workshop Publishing Utility for Garry's Mod, written in Rust & Svelte and powered by Tauri

Rust
1263
96
2078d
240 files
65 scanned(27%)
0f0e4e4

architecture░▒▓

entry (0) flagged (12) pkg (44)
93 nodes · 110 edgesscroll to zoom · click node to jump to finding
LOW (25/100) — WilliamVenner/gmpublisher — ScanRepo