Hans Leidekker (@hans) commented about dlls/rometadata/assembly.c:
+ break; + } + } + if (FAILED(hr)) return hr; + /* The stream name is padded to the next 4-byte boundary (ECMA-335 Partition II.24.2.2) */ + streams_cur += offsetof(struct stream_hdr, name[(streams[j].name_len + 4) & ~3]); + } + + if (assembly->stream_strings.size) + { + /* IMetaDataTables::GetStringHeapSize returns the string heap size without the nul byte padding. */ + const BYTE *ptr = assembly->stream_strings.start + assembly->stream_strings.size - 1; + ULONG padding; + + for (padding = 0; !ptr[0] && !ptr[-1]; ptr--, padding++) /* nothing */; + assembly->stream_strings.size -= padding; What if assembly->stream_strings.size == 1? This could be written without the padding variable.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/9147#note_118348