get entries of a windows unc path failed when call `cap_std::fs::Dir::from_std_file(dir).entries()`
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- rust
- Ambito
- operating-systems
Direzione di ricerca
Inizia in cap-primitives/src/windows/fs/get_path.rs, in get_path, e segui la catena di read_dir attraverso concatenate. Riproduci il caso segnalato di percorso UNC su Windows, quindi aggiungi la copertura di regressione per Dir::from_std_file(dir).entries(). Il lavoro è completato quando i percorsi UNC che iniziano con \?\UNC\ vengono risolti correttamente senza compromettere i normali percorsi Windows.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
test code
let path = std::path::Path::new("C:\\Users\\path\\to\\folder"); //works fine
let path = std::path::Path::new("\\\\?\\UNC\\Mac\\path\\to\\folder"); //throw an error
let dir = std::fs::OpenOptions::new()
.read(true)
.custom_flags(33554432u32)
.open(path).unwrap();
let entries = cap_std::fs::Dir::from_std_file(dir).entries();
dbg!(entries);
reason
After debugged, I found cap_primitives/src/windows/fs get_path cause this problem.
let wide_final = if wide.starts_with(&['\\' as u16, '\\' as _, '?' as _, '\\' as _]) {
&wide[4..] //throw error
//&wide //change to this and it works
} else {
&wide
};
when path start with \\\\?\\, \\\\?\\ will be remove, and \\\\?\\UNC\\Mac\\path\\to\\folder changed to UNC\\Mac\\path\\to\\folder, so a path not found error be throwed.
dependency chain
the dependency chain is:
cap_std::fs::dir::Dir::entriescap_primitives::fs::read_dir::read_base_dircap_primitives::windows::fs::read_dir_inner::ReadDirInner::read_base_dircap_primitives::windows::fs::read_dir_inner::ReadDirInner::new_uncheckedcap_primitives::windows::fs::get_path::concatenatecap_primitives::windows::fs::get_path::get_path
cargo.toml
cap-std = "1.0.14"
- Lingua principale
- Rust
- Stelle
- 821
- Fork
- 59
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bytecodealliance/cap-std
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
bytecodealliance/cap-std#427 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
bytecodealliance/cap-std#416 · 2 commenti ·
-
Archiving cap-std Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
bytecodealliance/cap-std#426 · 2 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
bytecodealliance/cap-std#423 · 5 commenti ·
-
Replace cap-async-std Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
bytecodealliance/cap-std#408 · 4 commenti · 2 reazioni ·
Tutte le issue di bytecodealliance/cap-std
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
state:needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
zed-industries/zed#64680 · 2 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
RustPython/RustPython#8802 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
TheLarkInn/aipm#2390 ·