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).
From: Paul Gofman pgofman@codeweavers.com
--- dlls/dxdiagn/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c index 696acf7dc51..0a6111fff25 100644 --- a/dlls/dxdiagn/provider.c +++ b/dlls/dxdiagn/provider.c @@ -1652,7 +1652,7 @@ static HRESULT build_directshowfilters_tree(IDxDiagContainerImpl_Container *node return hr;
hr = ICreateDevEnum_CreateClassEnumerator(pCreateDevEnum, &CLSID_ActiveMovieCategories, &pEmCat, 0); - if (FAILED(hr)) + if (hr != S_OK) goto cleanup;
while (IEnumMoniker_Next(pEmCat, 1, &pMCat, NULL) == S_OK)