Skip to content

[Bug] install.sh rm -rf unsafe if destination is a real directory #9

@ngmks

Description

@ngmks

🏷️ Priorité : MOYENNE | Type : Bug

Problème

Dans install.sh, la logique de nettoyage avant création de symlink utilise rm -rf sans vérifier que la cible est un symlink :

# Lignes 44, 49 :
[ -e "$SKILL_DST" ] || [ -L "$SKILL_DST" ] && rm -rf "$SKILL_DST"

Si $SKILL_DST est un vrai répertoire (ex: l'utilisateur a manuellement créé ~/.claude/skills/index-sessions/), rm -rf supprime tout le contenu du répertoire.

Localisation

Fichier : apps/claude_code_data/install.sh, lignes 44 et 49

Comment reproduire

  1. Créer manuellement le répertoire : mkdir -p ~/.claude/skills/index-sessions
  2. Y mettre des fichiers : echo "data" > ~/.claude/skills/index-sessions/important.txt
  3. Exécuter bash apps/claude_code_data/install.sh
  4. → Le répertoire et son contenu sont supprimés par rm -rf

Correction attendue

# AVANT (dangereux) :
[ -e "$SKILL_DST" ] || [ -L "$SKILL_DST" ] && rm -rf "$SKILL_DST"

# APRÈS (safe) :
if [ -L "$SKILL_DST" ]; then
    rm "$SKILL_DST"  # Supprime seulement le symlink
elif [ -e "$SKILL_DST" ]; then
    die "Destination exists and is not a symlink: $SKILL_DST — remove it manually"
fi

Même correction pour $HOOK_DST (ligne 49).

Critères de succès

  • Symlink existant → supprimé et recréé (inchangé)
  • Répertoire réel existant → erreur explicite, pas de suppression
  • Rien n'existe → création normale
  • Même logique pour skill et hook destinations

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions