Maybe unsound in RLocal::new
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Rust
- Sterne
- 337
- Forks
- 32
- Ø Merge
- 8 T. 17 Std.
- Gemergte PRs (30 T.)
- 11
Beschreibung
Hello, thank you for your contribution in this project, I am scanning the unsoundness problem in rust project.
I notice the following code:
pub struct RLocal<T: Copy> {
old_value: T,
variable: *mut T,
}
impl<T> RLocal<T>
where
T: Copy,
{
pub fn new(new_value: T, variable: *mut T) -> RLocal<T> {
unsafe {
let old_value = libr::get(variable);
libr::set(variable, new_value);
Self {
old_value,
variable,
}
}
}
}
Considering that pub mod raii, and new is also a pub function. I assume that users can directly call this function. This potential situation could result in libr::get being called to a null pointer, and might trigger undefined behavior (UB). For safety reasons, I felt it necessary to report this issue. If you have performed checks elsewhere that ensure this is safe, please don’t take offense at my raising this issue.
I suggest Several possible fixes:
- If there is no external usage for
RLocalornew, they should not marked aspub, at least itsnewshould not marked aspub newmethod should add additional check for null pointer.- mark new method as unsafe and proper doc to let users know that they should provide valid Pointers.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das öffentliche raii-Modul und RLocal::new zu lokalisieren, und untersuche dann die Aufrufer sowie die Zeigerannahmen rund um libr::get und libr::set. Ermittle, ob die API einen Nullzeiger oder einen anderweitig ungültigen Zeiger empfangen kann; als erledigt gilt die Aufgabe, wenn der Sicherheitsvertrag oder die Sichtbarkeit eindeutig ist und der gemeldete Pfad zu undefiniertem Verhalten behoben ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- security
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100