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
This commit is contained in:
Kadic Mirzet 2026-02-22 10:31:34 +01:00
parent 2c86415cb4
commit 1fcc9370f1

View file

@ -486,20 +486,30 @@ install_picoclaw() {
msg "$BLUE" "Extracting archive..." msg "$BLUE" "Extracting archive..."
local extract_dir local extract_dir
extract_dir=$(mktemp -d) extract_dir=$(mktemp -d)
tar -xzf "$tmp_file" -C "$extract_dir" 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_NAME}" "$binary_path" 2>/dev/null || \ mv "${extract_dir}/"*"/${BINARY_NAME}" "$binary_path" 2>/dev/null || \
mv "${extract_dir}/"* "$binary_path" 2>/dev/null mv "${extract_dir}/"* "$binary_path" 2>/dev/null
rm -rf "$extract_dir" "$tmp_file" 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 elif [[ "$asset_name" == *.zip ]]; then
msg "$BLUE" "Extracting archive..." msg "$BLUE" "Extracting archive..."
local extract_dir local extract_dir
extract_dir=$(mktemp -d) extract_dir=$(mktemp -d)
unzip -q "$tmp_file" -d "$extract_dir" 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_NAME}" "$binary_path" 2>/dev/null || \ mv "${extract_dir}/"*"/${BINARY_NAME}" "$binary_path" 2>/dev/null || \
mv "${extract_dir}/"* "$binary_path" 2>/dev/null mv "${extract_dir}/"* "$binary_path" 2>/dev/null
rm -rf "$extract_dir" "$tmp_file" rm -rf "$extract_dir" "$tmp_file"
else
msg "$RED" "Error: Failed to extract archive"
rm -rf "$extract_dir" "$tmp_file"
exit 1
fi
else else
# Assume it's a raw binary # Assume it's a raw binary
mv "$tmp_file" "$binary_path" mv "$tmp_file" "$binary_path"