From d69f3732cc076e1619ca1e208ecd2f110e22ca7d Mon Sep 17 00:00:00 2001 From: Daniel McNab <36049421+DJMcNab@users.noreply.github.com> Date: Sat, 16 Jul 2022 08:37:18 +0000 Subject: [PATCH] Minimally fix the known unsoundness in bevy_mikktspace (#5299) # Objective - 0.8 is coming soon, and our mikktspace implementation is unsound - see https://github.com/gltf-rs/mikktspace/issues/26 - Best not to ship that ## Solution - Fix the unsoundness in a minimal way - Obviously there might be others, but it seems unlikely we have any way to know about those --- crates/bevy_mikktspace/src/generated.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/bevy_mikktspace/src/generated.rs b/crates/bevy_mikktspace/src/generated.rs index c05b8c1566ee3..c1586235da489 100644 --- a/crates/bevy_mikktspace/src/generated.rs +++ b/crates/bevy_mikktspace/src/generated.rs @@ -1060,8 +1060,8 @@ unsafe fn InitTriInfo( let mut bChooseOrientFirstTri: bool = false; if (*pTriInfos.offset((t + 1) as isize)).iFlag & 4i32 != 0i32 { bChooseOrientFirstTri = true - } else if CalcTexArea(geometry, &*piTriListIn.offset((t * 3 + 0) as isize)) - >= CalcTexArea(geometry, &*piTriListIn.offset(((t + 1) * 3 + 0) as isize)) + } else if CalcTexArea(geometry, piTriListIn.offset((t * 3 + 0) as isize)) + >= CalcTexArea(geometry, piTriListIn.offset(((t + 1) * 3 + 0) as isize)) { bChooseOrientFirstTri = true } @@ -1503,9 +1503,7 @@ unsafe fn GenerateSharedVerticesIndexList( vP_1.z }; let iCell_0 = FindGridCell(fMin, fMax, fVal_0); - let mut pTable: *mut i32 = 0 as *mut i32; - pTable = &mut piHashTable[piHashOffsets[iCell_0] as usize] as *mut i32; - *pTable.offset(piHashCount2[iCell_0] as isize) = i as i32; + piHashTable[(piHashOffsets[iCell_0] + piHashCount2[iCell_0]) as usize] = i as i32; piHashCount2[iCell_0] += 1; i += 1 } @@ -1525,7 +1523,7 @@ unsafe fn GenerateSharedVerticesIndexList( k = 0; while k < g_iCells { // extract table of cell k and amount of entries in it - let mut pTable_0 = &mut piHashTable[piHashOffsets[k] as usize] as *mut i32; + let pTable_0 = piHashTable.as_mut_ptr().offset(piHashOffsets[k] as isize); let iEntries = piHashCount[k] as usize; if !(iEntries < 2) { e = 0;