python / python/cpython

pathlib.Path.copy() can copy a directory into itself via absolute paths or symlinks

Offen
#154,690 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

stdlib type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Bug description:

Bug report

Path.copy() guards against copying a directory into itself with ensure_distinct_paths(), but the check is lexical only. Relative vs absolute paths and symlink aliases bypass it.

from pathlib import Path
import os

Path('src').mkdir()
(Path('src') / 'f').write_text('hello')

Path('src').copy('src/nested')  # OSError - OK

Path('src').copy(Path('src').resolve() / 'nested')  # succeeds - copies into itself

os.symlink('src', 'link')
Path('src').copy('link/nested')  # also succeeds

Same class of bug as gh-149835 that was fixed with `realpath`, but `pathlib` still uses a lexical comparison.

### CPython versions tested on:

CPython main branch

### Operating systems tested on:

Linux

<!-- gh-linked-prs -->
### Linked PRs
* gh-154689
<!-- /gh-linked-prs -->

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne bei pathlib.Path.copy() und seiner Prüfung ensure_distinct_paths(), und reproduziere anschließend die Beispiele mit absoluten Pfaden und Symlinks aus dem Issue unter Linux. Als erledigt gilt die Aufgabe, wenn beide Aliase als Versuch, ein Verzeichnis in sich selbst zu kopieren, abgelehnt werden, während das bestehende Verhalten mit relativen Pfaden weiterhin abgedeckt bleibt; prüfe den verknüpften PR gh-154689 auf bereits laufende Arbeiten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
operating-systems
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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