create: overwrite follows target symlinks and deletes linked contents

Offen
#2,419 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@leslieeilsel arbeitet bereits daran.

Seit 11.8.2026.

  • #2418 von @leslieeilsel — offen
  • #3072 von @Crimson341 — offen

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
rust
Bereich
cli

Rechercherichtung

Überprüfe den Überschreibablauf von vp create und den Entwurf der Korrektur in #2418 und reproduziere anschließend den Symlink-Fall aus diesem Issue unter macOS oder auf einem anderen lokalen Dateisystem. Als erledigt gilt die Bestätigung, dass „Vorhandene Dateien entfernen und fortfahren“ keine Inhalte außerhalb des Symlink-Eintrags löscht und dass der Prompt oder das Verhalten jedes aufgelöste Ziel explizit macht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Summary

When vp create targets a non-empty directory symbolic link, choosing “Remove existing files and continue” deletes files inside the linked directory instead of removing or rejecting the link itself.

The confirmation prompt only displays the target path. It does not indicate that deletion will occur in the directory referenced by that path.

Reproduction

  1. Create a directory containing a sentinel file:

    mkdir linked-directory
    printf 'keep\n' > linked-directory/keep.txt
    
  2. Create a target directory symlink:

    ln -s "$PWD/linked-directory" new-project
    
  3. Start any vp create flow with new-project as its target directory.

  4. When prompted, select “Remove existing files and continue”.

  5. Check the linked directory:

    test -e linked-directory/keep.txt
    

Actual behavior

linked-directory/keep.txt is deleted. Other entries in the linked directory are also removed recursively, except for the existing .git preservation behavior.

Expected behavior

The overwrite flow should not implicitly traverse the final target symlink and delete its destination contents.

It should treat the symbolic link as a distinct filesystem entry, or otherwise make the resolved deletion target explicit before performing a destructive operation.

Impact

This can cause irreversible local data loss outside the symbolic-link entry shown by the prompt.

The trigger is limited: the create target must be a symbolic link and the user must confirm removal. This is therefore a low-frequency but high-impact local data-loss issue, not a remote security vulnerability.

Environment

  • Reproduced on macOS arm64
  • Node.js v25.9.0
  • Vite+ revision: 295c8d6069605a249ed39e8c5e4d4d3d79e4be3e

A draft fix is available in #2418.

Vorherrschende Sprache
Rust
Sterne
6.5k
Forks
297
Ø Merge
20 Std. 18 Min.
Gemergte PRs (30 T.)
236

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus voidzero-dev/vite-plus

Alle Issues in voidzero-dev/vite-plus

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.