Skip to content

Fix integer overflow in STL parser sanity check#4790

Open
jimmy-ly00 wants to merge 1 commit into
bulletphysics:masterfrom
jimmy-ly00:fix/stl-parser-integer-overflow
Open

Fix integer overflow in STL parser sanity check#4790
jimmy-ly00 wants to merge 1 commit into
bulletphysics:masterfrom
jimmy-ly00:fix/stl-parser-integer-overflow

Conversation

@jimmy-ly00
Copy link
Copy Markdown

The sanity check in LoadMeshFromSTL computes expectedBinaryFileSize as:

int expectedBinaryFileSize = numTriangles * 50 + 84;

Both numTriangles and 50 are int, so the multiplication is performed in 32-bit signed arithmetic and can overflow. For example, numTriangles = 85899346 yields 85899346 * 50 = 4294967300, which wraps to 4 in 32-bit. Adding 84 gives 88, which can match a crafted 88-byte file and bypass the check. The parser then tries to read ~4 GB of triangles from the 88-byte heap buffer.

Fix: cast numTriangles to long long before the multiplication so the arithmetic is performed in 64-bit, preventing the overflow. Valid STL files are unaffected because the result is identical when it fits in 32 bits.

The sanity check in LoadMeshFromSTL computes expectedBinaryFileSize as:

    int expectedBinaryFileSize = numTriangles * 50 + 84;

Both numTriangles and 50 are int, so the multiplication is performed in
32-bit signed arithmetic and can overflow. For example, numTriangles =
85899346 yields 85899346 * 50 = 4294967300, which wraps to 4 in 32-bit.
Adding 84 gives 88, which can match a crafted 88-byte file and bypass
the check. The parser then tries to read ~4 GB of triangles from the
88-byte heap buffer.

Fix: cast numTriangles to long long before the multiplication so the
arithmetic is performed in 64-bit, preventing the overflow. Valid STL
files are unaffected because the result is identical when it fits in
32 bits.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant