fix: robustesse v1.1.6 — timeout runner/doctor, anti-deadlock, securite migrate, win32 is_running, websocket RFC6455, keyring JSON
release / release (push) Successful in 13m38s
release / macos (push) Canceled after 0s

- runner.rs: timeout 30s sur les commandes capturees (doctor ne pend plus) + pipes stdout/stderr draines dans des threads (anti-deadlock) ; run_untimed() pour les installations longues (npm/cargo/go) — sh() des installateurs l'utilise, les sondes gardent le timeout

- migrate_cmd.rs: rejet des chemins unsafe (path traversal) dans import_bundle

- process.rs: is_running Windows via OpenProcess/GetExitCodeProcess (fiable vs tasklist)

- probe.rs: drain des pipes en threads dans detect_external_version

- web.rs: boucle de traduction i18n (curseur, plus de boucle infinie si la traduction contient {{)

- serve.rs: frames WebSocket RFC 6455 avec vraies longueurs > 125 octets (126/127)

- secrets.rs: index keyring serialise en JSON (cles contenant des virgules)

- sandbox.rs: tests sans fuite de TempDir (plus de mem::forget)

- version 1.1.6, man pages et ROADMAP maj
This commit is contained in:
2026-08-26 10:17:17 -04:00
parent fa2c42d505
commit d911ce5d92
13 changed files with 212 additions and 50 deletions
+3 -1
View File
@@ -98,7 +98,9 @@ pub fn sh(
env: &BTreeMap<String, String>,
cwd: Option<&Path>,
) -> Result<RunOutput> {
let out = runner.run(cmd, args, env, cwd, true)?;
// Installs are legitimately long (npm/cargo/go/... can take minutes):
// no probe timeout here, only run() (doctor/version probes) is bounded.
let out = runner.run_untimed(cmd, args, env, cwd, true)?;
if out.code != 0 {
let mut detail = out.stderr.trim().to_string();
if detail.is_empty() {