Context varargs can smuggle graph-runtime references past the borrow tree's lifetime discipline
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 25/100
- Issue-Typ
- Bug
- Klarheit
- Muss geklärt werden
- Aktivitätsstatus
- Ruhig
- Tech-Stack
- rust
- Bereich
- backend-api-design
Rechercherichtung
Beginne damit, OwnedContextImpl::with_vararg, die Lebensdauerverwaltung von NodeContainer und den IORecord-Snapshot-Pfad des Monitor-Knotens nachzuverfolgen, und überprüfe anschließend die Änderungen an der Rangpolymorphie in #4335. Als erledigt gilt die Aufgabe, wenn die context- und vararg-APIs nicht mehr zulassen, dass Referenzen auf die Graph-Laufzeit über ihre gültige Lebensdauer hinaus entweichen, auch nicht über eine Neukompilierung des Graphen hinweg, ohne dabei die Garantien von sicherem Code zu schwächen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Reported by @TrueDoctor following the rank polymorphism PR (#4335). Three existing mechanisms combine into an unsound API surface:
- The borrow tree launders lifetimes:
NodeContainerderefs*const TypeErasedNode<'static>to&'static, so references handed out inside the graph (the&PlatformEditorApiscope wire,&WgpuExecutor, or any reference to node-owned state) are typed'staticbut actually live only until the next graph recompilation deallocates their owner. OwnedContextImpl::with_varargaccepts anyBox<dyn AnyHash + Send + Sync>. Its'staticbound cannot distinguish real ownership from a laundered reference, so safe code in any node can store such a reference into a context. #4335 made this channel idiomatic (render boundary config, per-item lambda rows).- Contexts escape the graph: the Monitor node snapshots
IORecord { input: Context, output }into anArc<dyn Any>that the editor introspects and can retain across recompiles.
Combined: a node stores a laundered reference as a vararg, a Monitor captures the context, the graph recompiles and frees the referent, and the editor reads freed memory through entirely safe code (vararg() + downcast_ref). A vararg with interior mutability would similarly let context readers mutate graph-owned state as a covert return channel.
All current with_vararg callers box owned data, so no UB exists in the code today. But the risk remains for the API permitting it silently.
- Vorherrschende Sprache
- Rust
- Sterne
- 27.8k
- Forks
- 1.3k
- Ø Merge
- 10 Std. 53 Min.
- Gemergte PRs (30 T.)
- 195
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus GraphiteEditor/Graphite
-
`third-party-licenses` fails on Windows when the parent process is PowerShellEvtl. vergeben @sahilshingate01 hat das vor 12 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
GraphiteEditor/Graphite#4745 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Resizing a text box by one edge handle incorrectly locks both Max Width and Max Height, silently clipping textEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
GraphiteEditor/Graphite#4396 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Type hint is selected in node graph viewEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
GraphiteEditor/Graphite#4311 ·
Maintainer antworten meist innerhalb von 1 Tag
-
`cargo run` fails on WebAssembly target due to `CARGO_BUILD_TARGET` leaking into `rustc_codegen_spirv` buildEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
GraphiteEditor/Graphite#3939 · 2 Kommentare · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 50/100
GraphiteEditor/Graphite#4901 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in GraphiteEditor/Graphite
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
GiganticMinecraft/seichi-portal-backend#1651 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Android visitors are offered the Linux .deb on cap.so's homepage and download pageEvtl. vergeben @patrickballard hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
CapSoftware/Cap#3677 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag