`<PackedStorage<T> as UnknownComponentStorage>::transfer_component` is unsound
ImmemorConsultrixContrarie opened this issue · 0 comments
ImmemorConsultrixContrarie commented
This implementation is unsound:
legion/src/internals/storage/packed.rs
Lines 421 to 432 in 0d0a539
because this compiles:
fn soundness_hole() {
let mut a: PackedStorage<u64> = Default::default();
let mut b: PackedStorage<u8> = Default::default();
let a: &mut dyn UnknownComponentStorage = &mut a;
a.transfer_component(ArchetypeIndex(0), ComponentIndex(0), ArchetypeIndex(0), &mut b);
}
Getting this UB outside of lib is tricky, however unsoundness inside the lib itself is bad too.