Signed-off-by: Sven Baars <sven.wine(a)gmail.com>
---
dlls/msdmo/dmoreg.c | 15 +++++++++------
dlls/msdmo/tests/msdmo.c | 7 +++++++
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/dlls/msdmo/dmoreg.c b/dlls/msdmo/dmoreg.c
index 864cb859e6..1c06bbfe16 100644
--- a/dlls/msdmo/dmoreg.c
+++ b/dlls/msdmo/dmoreg.c
@@ -530,7 +530,7 @@ static HRESULT WINAPI IEnumDMO_fnNext(
TRACE("(%p)->(%d %p %p %p)\n", This, cItemsToFetch, pCLSID, Names, pcItemsFetched);
- if (!pCLSID || !Names)
+ if (!pCLSID)
return E_POINTER;
if (!pcItemsFetched && cItemsToFetch > 1)
@@ -656,14 +656,17 @@ static HRESULT WINAPI IEnumDMO_fnNext(
}
/* Media object wasn't filtered so add it to return list */
- Names[count] = NULL;
len = MAX_PATH * sizeof(WCHAR);
ret = RegQueryValueExW(hkey, NULL, NULL, NULL, (LPBYTE)szValue, &len);
- if (ERROR_SUCCESS == ret)
+ if (Names)
{
- Names[count] = CoTaskMemAlloc((strlenW(szValue) + 1) * sizeof(WCHAR));
- if (Names[count])
- strcpyW(Names[count], szValue);
+ Names[count] = NULL;
+ if (ret == ERROR_SUCCESS)
+ {
+ Names[count] = CoTaskMemAlloc((strlenW(szValue) + 1) * sizeof(WCHAR));
+ if (Names[count])
+ strcpyW(Names[count], szValue);
+ }
}
wsprintfW(szGuidKey,szToGuidFmt,szNextKey);
CLSIDFromString(szGuidKey, &pCLSID[count]);
diff --git a/dlls/msdmo/tests/msdmo.c b/dlls/msdmo/tests/msdmo.c
index 7617123aa5..68de11f21a 100644
--- a/dlls/msdmo/tests/msdmo.c
+++ b/dlls/msdmo/tests/msdmo.c
@@ -107,6 +107,13 @@ static void test_DMOEnum(void)
ok(hr == S_FALSE, "expected S_FALSE, got %#x\n", hr);
ok(count == 0, "expected 0, got %d\n", count);
+ hr = IEnumDMO_Next(enum_dmo, 2, NULL, &name, &count);
+ ok(hr == E_POINTER, "expected S_FALSE, got %#x\n", hr);
+
+ hr = IEnumDMO_Next(enum_dmo, 2, &clsid, NULL, &count);
+ ok(hr == S_FALSE, "expected S_FALSE, got %#x\n", hr);
+ ok(count == 0, "expected 0, got %d\n", count);
+
IEnumDMO_Release(enum_dmo);
}
--
2.17.1