Adding rsa dependency introduces non-additive lazy_static feature that breaks other code
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- rust
- Ambito
- build-system, cryptography
Direzione di ricerca
Start by tracing the rsa to num-bigint-dig to lazy_static dependency chain and reproducing the failure with a non-Send lazy_static value like the example in image.rs. Determine how the non-additive spin_no_std feature is enabled and whether the dependency declarations expose a way to avoid it. Done means the rsa dependency no longer breaks unrelated workspace code and the regression is covered by a reproducible check.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
This is the same problem as #219, but since that issue wasn't fully evaluated, I wanted to add my report, with a bit more context.
Dependency chain:
rsadepends onnum-bigint-dignum-bigint-digdepends onlazy_staticwithfeatures = ["spin_no_std"].
lazy_static's spin_no_std feature is non-additive; it causes lazy_static to replace use of std::sync::Once with spin:once::Once. This may seem like a harmless replacement, but:
spin::once::Once<T>has different trait bounds. Namely, it only implementsSyncwhereT: Send + Syncwhilelazy_staticusingstd::sync::Onceonly requiresT: Sync.- This means that anyone using
lazy_staticon a non-Sendtype will see their code break if thespin_no_stdfeature is enabled. - Adding
rsaas a dependency to a large workspace means that every crate in that workspace now gets the modifiedlazy_staticcode usingspinwith stricter trait bounds.
This is currently happening to me: I added rsa to a large workspace, and that change causes compile errors in unrelated (previously working) code:
error[E0277]: `*const u8` cannot be sent between threads safely
--> image.rs:25:1
|
25 | / lazy_static::lazy_static! {
26 | | pub(crate) static ref HELLO_IMAGE: Option<ImageBuffer> = {
27 | | let image_bytes = std::fs::read("hello.png").ok()?;
28 | |
... |
36 | | };
37 | | }
| |_^ `*const u8` cannot be sent between threads safely
I'm not sure how to handle this, but it would be nice if there were a feature in rsa (and num-bigint-dig) to disable this behavior. As it is, I'm unable to add an rsa dependency unless I fork+patch num-bigint-dig.
- Lingua principale
- Rust
- Stelle
- 673
- Fork
- 190
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
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 RustCrypto/RSA
-
Bump MSRV to 1.89 Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
RustCrypto/RSA#707 · 2 commenti · 1 reazione ·
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 74/100
RustCrypto/RSA#703 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
RustCrypto/RSA#686 · 4 commenti ·
-
`rsa` v0.10 release tracking Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
RustCrypto/RSA#647 · 9 commenti · 1 reazione ·
-
broken rust docs Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
RustCrypto/RSA#641 · 3 reazioni ·
Tutte le issue di RustCrypto/RSA
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
TheLarkInn/aipm#2413 ·
-
documentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
alexgorbatchev/simple-ptt#15 ·
-
tooling
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
todo:ticket
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
taikoxyz/taiko-mono#22168 · 1 commento ·