[BR] Fix integer overflow in physx::writeCompressedContact causing sim corruption #357
+16
−15
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If a contact buffer has exactly 256 contacts in it, the endIndex on its last StrideBatch will overflow from 256 to 0, causing it to fail to copy the last batch of contacts but still setting the output count to include it, sending uninitialized garbage data into the solver, which kills the simulation very quickly.
Example of 256 input contacts to the function

Corresponding grouped output contacts, note the last group is garbage

The root cause is this u8 overflowing back to 0

We can fix it easily by using PxU16 instead so it can hold the proper count
cc @PierreTerdiman