[PATCH] dlls/windows.globalization: don't allocate a partial structure
Chris Robinson
chris.kcat at gmail.com
Wed Mar 23 16:54:54 CDT 2022
On Wednesday, March 23, 2022 12:32:52 PM PDT Alexandre Julliard wrote:
> An empty size is probably OK to use at this point. It's not clear how
> much benefit it brings though, because obviously 1-size arrays in public
> structures can't be changed.
And I'm not sure it would change anything regarding this patch and ensuring
the object is properly allocated. A flexible array member isn't guaranteed to
be at the very end of the struct, it can overlap with some padding:
struct Foo {
int a;
char b;
char c[];
};
On most systems, sizeof(struct Foo) will be 8 bytes, but 'c' would immediately
follow 'b' causing offsetof(struct Foo, c[0]) to be 5. So if you use
offsetof(struct Foo, c[count]) for the allocation size, anything less than
c[3] would be under-allocating and create potential implicit overruns just
like before. so you still need to do something like
max(sizeof(struct Foo), offsetof(struct Foo, c[count])
to ensure a proper minimum allocation size.
More information about the wine-devel
mailing list