diff options
Diffstat (limited to 'thirdparty/vhacd/0002-fpermissive-fix.patch')
-rw-r--r-- | thirdparty/vhacd/0002-fpermissive-fix.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/thirdparty/vhacd/0002-fpermissive-fix.patch b/thirdparty/vhacd/0002-fpermissive-fix.patch new file mode 100644 index 0000000000..965df2944a --- /dev/null +++ b/thirdparty/vhacd/0002-fpermissive-fix.patch @@ -0,0 +1,53 @@ +diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h +index 487205062..52297cd78 100644 +--- a/thirdparty/vhacd/inc/btScalar.h ++++ b/thirdparty/vhacd/inc/btScalar.h +@@ -535,6 +535,29 @@ struct btTypedObject { + } + }; + ++// -- GODOT start -- ++// Cherry-picked from Bullet 2.88 to fix GH-27926 ++///align a pointer to the provided alignment, upwards ++template <typename T> ++T *btAlignPointer(T *unalignedPtr, size_t alignment) ++{ ++ struct btConvertPointerSizeT ++ { ++ union { ++ T *ptr; ++ size_t integer; ++ }; ++ }; ++ btConvertPointerSizeT converter; ++ ++ const size_t bit_mask = ~(alignment - 1); ++ converter.ptr = unalignedPtr; ++ converter.integer += alignment - 1; ++ converter.integer &= bit_mask; ++ return converter.ptr; ++} ++// -- GODOT end -- ++ + // -- GODOT start -- + }; // namespace VHACD + // -- GODOT end -- +diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp +index ce0e7f26f..8dee31e7e 100644 +--- a/thirdparty/vhacd/src/btAlignedAllocator.cpp ++++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp +@@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment) + + real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1)); + if (real) { +- offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1); +- ret = (void*)((real + sizeof(void*)) + offset); ++ // -- GODOT start -- ++ // Synced with Bullet 2.88 to fix GH-27926 ++ //offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1); ++ //ret = (void*)((real + sizeof(void*)) + offset); ++ ret = btAlignPointer(real + sizeof(void *), alignment); ++ // -- GODOT end -- + *((void**)(ret)-1) = (void*)(real); + } + else { |