Insufficient covariance check makes self_cell unsound
High severity
GitHub Reviewed
Published
Nov 14, 2023
to the GitHub Advisory Database
•
Updated Nov 14, 2023
Description
Published to the GitHub Advisory Database
Nov 14, 2023
Reviewed
Nov 14, 2023
Last updated
Nov 14, 2023
All public versions prior to
1.02
used an insufficient check to ensure that users correctly marked the dependent type as eithercovariant
ornot_covariant
. This allowed users to mark a dependent as covariant even though its type was not covariant but invariant, for certain invariant types involving trait object lifetimes. One example for such a dependent type istype Dependent<'a> = RefCell<Box<dyn fmt::Display + 'a>>
. Such a type allowed unsound usage in purely safe user code that leads to undefined behavior. The patched versions now produce a compile time error if such a type is marked ascovariant
.References