pathlib.Path.copy() can copy a directory into itself via absolute paths or symlinks
Đang mở
Chưa có ai nhận issue này.
stdlib
type-bug
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
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 -->
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu từ pathlib.Path.copy() và kiểm tra ensure_distinct_paths() của nó, sau đó tái hiện trên Linux các ví dụ về đường dẫn tuyệt đối và symlink trong issue. Được xem là hoàn tất khi cả hai alias đều bị từ chối vì sao chép một thư mục vào chính nó, đồng thời hành vi hiện có với đường dẫn tương đối vẫn được bao phủ; xem lại PR gh-154689 được liên kết để biết phần việc đang được thực hiện.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- operating-systems
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100