From: Theodoros Chatzigiannakis <tchatzigiannakis@gmail.com> --- dlls/msi/table.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dlls/msi/table.c b/dlls/msi/table.c index 6031dd9c805..44de70841ea 100644 --- a/dlls/msi/table.c +++ b/dlls/msi/table.c @@ -410,11 +410,19 @@ static UINT read_table_from_storage( MSIDATABASE *db, MSITABLE *t, IStorage *stg if( rawsize % row_size ) { - WARN("Table size is invalid %d/%d\n", rawsize, row_size ); - goto err; + /* MSI files may have streams padded to 4-byte alignment */ + UINT padding = rawsize % row_size; + if (padding < 4) + rawsize -= padding; + else + { + WARN("Table size is invalid %d/%d\n", rawsize, row_size ); + goto err; + } } - if ((t->row_count = rawsize / row_size)) + t->row_count = rawsize / row_size; + if (t->row_count) { if (!(t->data = calloc( t->row_count, sizeof(*t->data) ))) goto err; if (!(t->data_persistent = calloc( t->row_count, sizeof(BOOL) ))) goto err; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10114