The reference does not allow in-bounds reads of "partially dangling" pointers, whereas Miri does.
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Documentazione
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- documentation
Direzione di ricerca
Inizia dalle sezioni della Rust Reference relative a dangling pointers, pointed-to bytes, allocations e undefined behavior, quindi riproduci l'esempio fornito in Miri. Confronta la formulazione della Reference con il comportamento di Miri e determina la modifica alla documentazione necessaria per chiarire se sia possibile leggere dangling pointers parziali; il lavoro è completo quando la semantica e l'esempio sono descritti in modo coerente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Miri accepts this code, which prints 42:
#[repr(C)]
struct X {
a: usize,
}
#[repr(C)]
struct Y {
a: usize,
b: usize,
}
fn main() {
unsafe {
let x = X { a: 42 };
let py = &raw const x as *const Y;
let Y { a, .. } = *py;
println!("{a}");
}
}
On the other hand, the reference defines a dangling pointer as follows:
A reference/pointer is “dangling” if not all of the bytes it points to are part of the same live allocation (so in particular they all have to be part of some allocation).
And mentions as undefined behavior:
Accessing (loading from or storing to) a place that is dangling
Clearly, py is dangling by this definition, and clearly, the line let Y { a, .. } = *py; loads from py. So according to the reference, this should be UB. The reference does not have any notion of a "partially dangling" pointer that it's okay to read part of. Who is right: the reference or miri?
- Lingua principale
- Rust
- Stelle
- 1.6k
- Fork
- 611
- Merge medio
- 1g 3h
- PR unite (30g)
- 9
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi 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 rust-lang/reference
-
A-const-eval A-undefined-behavior
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
rust-lang/reference#2266 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
A-resolve
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
A-coercions
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
rust-lang/reference#2094 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di rust-lang/reference
Issue simili
-
llm translation
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
CybercentreCanada/sawp#13 ·
-
area: backend type: enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 61/100
armadavalor/WinKnife#6 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
5omeOtherGuy/phaseone#870 ·
I maintainer di solito rispondono entro 1 giorno