Skip to content

Fix static-size FFI type aliases #463

Merged
davidhewitt merged 2 commits intoPyO3:mainfrom
jakelishman:win32
Oct 27, 2024
Merged

Fix static-size FFI type aliases #463
davidhewitt merged 2 commits intoPyO3:mainfrom
jakelishman:win32

Conversation

@jakelishman
Copy link
Copy Markdown
Contributor

Several type aliases with statically sized names (e.g. npy_uint64) were being aliased to platform-dependent types like ::std::os::raw::c_long. Most of these were barely used, so it seems like they didn't cause problems before, but now with npy_uint64 being used in certain structs, which are the target of pointer punning, the mismatch in sizes became visible. For example, npy_uint64 was previously typedef'd to c_ulong, which is 64 bits on 64-bit platforms and on all Unix-likes, but 32 bits on Windows 32-bit. This caused inaccurate reads through pointers to structs containing them, eventually resulting in attempts to dereference null pointers.

That appears to be the only problem with win32 support, so the second commit re-adds it to the CI matrix and removes the enforced compiler error.

Fix #448

Several type aliases with statically sized names (e.g. `npy_uint64`)
were being aliased to platform-dependent types like
`::std::os::raw::c_long`.  Most of these were barely used, so it seems
like they didn't cause problems before, but now with `npy_uint64` being
used in certain structs, which are the target of pointer punning, the
mismatch in sizes became visible.  For example, `npy_uint64` was
previously typedef'd to `c_ulong`, which is 64 bits on 64-bit platforms
and on all Unix-likes, but 32 bits on Windows 32-bit.  This caused
inaccurate reads through pointers to structs containing them, eventually
resulting in attempts to derefence null pointers.
The parent commit fixes the problems with 32-bit Windows, this one
simply re-enables the build and re-activates the CI runs of it.
@maffoo
Copy link
Copy Markdown
Contributor

maffoo commented Oct 22, 2024

Thanks for digging into this!

Copy link
Copy Markdown
Member

@davidhewitt davidhewitt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, looks very promising! Have triggered CI...

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.

Numpy2 support fails when running with 32-bit windows

3 participants