Fix: Improve archive validation and variable scope in Maldet installer

Issue: Archive found and copied successfully ('✓ Archive ready for extraction') but then fails extraction validation ('✗ No valid archive available for extraction').

Root cause: Variable scope - temp_file set inside offline archive block wasn't reliably persisting to extraction check.

Solution:
- Immediately validate archive after copy (verify file exists and non-empty)
- Set download_success=true/false based on actual validation result
- Add clearer error messages showing which variable failed check
- Simplify extraction condition check

Now archives are validated right after copying, so no scope issues.
This commit is contained in:
Developer
2026-04-21 19:46:46 -04:00
parent ff1d8f1ce8
commit 95c5cfdf61
+10 -4
View File
@@ -349,13 +349,15 @@ install_maldet_only() {
if [ -n "$local_archive" ]; then if [ -n "$local_archive" ]; then
echo "" echo ""
echo "Using pre-downloaded archive..." echo "Using pre-downloaded archive..."
if cp "$local_archive" /tmp/maldetect-offline.tar.gz 2>/dev/null; then
temp_file="/tmp/maldetect-offline.tar.gz" temp_file="/tmp/maldetect-offline.tar.gz"
if cp "$local_archive" "$temp_file" 2>/dev/null && [ -f "$temp_file" ] && [ -s "$temp_file" ]; then
download_success=true download_success=true
best_source="offline-archive" best_source="offline-archive"
echo -e "${GREEN}✓ Archive ready for extraction${NC}" echo -e "${GREEN}✓ Archive ready for extraction${NC}"
else else
echo -e "${RED}✗ Failed to copy archive${NC}" echo -e "${RED}✗ Failed to copy or validate archive${NC}"
download_success=false
temp_file=""
fi fi
else else
echo -e "${RED}✗ No local archive found${NC}" echo -e "${RED}✗ No local archive found${NC}"
@@ -380,8 +382,12 @@ install_maldet_only() {
fi fi
fi fi
# At this point, download_success should be true with temp_file set # Extract and install if we have a valid archive
if [ "$download_success" = true ] && [ -f "$temp_file" ] && [ -s "$temp_file" ]; then if [ "$download_success" = true ]; then
if [ ! -f "$temp_file" ] || [ ! -s "$temp_file" ]; then
echo -e "${RED}✗ Archive file missing or empty: $temp_file${NC}"
return 1
fi
echo "Installing from $best_source..." echo "Installing from $best_source..."
echo "" echo ""