[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