From 1fcc9370f169545a8f1e28cad6bec2efdc5d6143 Mon Sep 17 00:00:00 2001 From: Kadic Mirzet Date: Sun, 22 Feb 2026 10:31:34 +0100 Subject: [PATCH] fix: add error handling for archive extraction Clean up temporary files if tar/unzip fails during extraction. Generated with [Z.ai](https://z.ai/subscribe?ic=JGTYCX7ZO7) Co-Authored-By: Z.ai GLM-5 --- install.sh | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/install.sh b/install.sh index d13f4f50c..59751ecff 100755 --- a/install.sh +++ b/install.sh @@ -486,20 +486,30 @@ install_picoclaw() { msg "$BLUE" "Extracting archive..." local extract_dir extract_dir=$(mktemp -d) - tar -xzf "$tmp_file" -C "$extract_dir" - mv "${extract_dir}/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ - mv "${extract_dir}/"*"/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ - mv "${extract_dir}/"* "$binary_path" 2>/dev/null - rm -rf "$extract_dir" "$tmp_file" + if tar -xzf "$tmp_file" -C "$extract_dir" 2>/dev/null; then + mv "${extract_dir}/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ + mv "${extract_dir}/"*"/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ + mv "${extract_dir}/"* "$binary_path" 2>/dev/null + rm -rf "$extract_dir" "$tmp_file" + else + msg "$RED" "Error: Failed to extract archive" + rm -rf "$extract_dir" "$tmp_file" + exit 1 + fi elif [[ "$asset_name" == *.zip ]]; then msg "$BLUE" "Extracting archive..." local extract_dir extract_dir=$(mktemp -d) - unzip -q "$tmp_file" -d "$extract_dir" - mv "${extract_dir}/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ - mv "${extract_dir}/"*"/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ - mv "${extract_dir}/"* "$binary_path" 2>/dev/null - rm -rf "$extract_dir" "$tmp_file" + if unzip -q "$tmp_file" -d "$extract_dir" 2>/dev/null; then + mv "${extract_dir}/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ + mv "${extract_dir}/"*"/${BINARY_NAME}" "$binary_path" 2>/dev/null || \ + mv "${extract_dir}/"* "$binary_path" 2>/dev/null + rm -rf "$extract_dir" "$tmp_file" + else + msg "$RED" "Error: Failed to extract archive" + rm -rf "$extract_dir" "$tmp_file" + exit 1 + fi else # Assume it's a raw binary mv "$tmp_file" "$binary_path"