CreateClassEnumerator() can return S_FALSE and NULL moniker if the specified category is empty or doesn't exist (and devenum implementation can do that), build_directshowfilters_tree() will crash in that case. That's not new and AFAIU should not be normally hit as the category should not be empty, but I managed to hit that on some prefix (maybe with messed up direct show registration) and the change looks simple and sure enough probably (currently it will always crash if gets S_FALSE).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4733
The practical effect of the change is that boolean is 1 byte while BOOL is 4 bytes, so we are wrongly filling more bytes in those methods and wrongly expect full 4 byte BOOL value to be filled from apps IIterator implemenation (and thus depend on uninitialized data in implementation).
That fixes a hang on new game start in Phasmophobia (when it is configured to use windows.media.speech). That was originally attributed as a regression from commit 62173699c38453777c7d5638ed2e779790506b75 ("include: Don't align the stack for PE builds.") while before that commit it worked by chance only of course, the commit only changed stack data a bit so we were a bit more lucky in getting high bytes of BOOL as 0 in windows.media.speech/vector.c:vector_hstring_create_copy().
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4731