Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

get entries of a windows unc path failed when call `cap_std::fs::Dir::from_std_file(dir).entries()`

Aperta
#318 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

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

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::entries
  • cap_primitives::fs::read_dir::read_base_dir
  • cap_primitives::windows::fs::read_dir_inner::ReadDirInner::read_base_dir
  • cap_primitives::windows::fs::read_dir_inner::ReadDirInner::new_unchecked
  • cap_primitives::windows::fs::get_path::concatenate
  • cap_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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di bytecodealliance/cap-std

Tutte le issue di bytecodealliance/cap-std

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.