From: Jonas Maebe Subject: Re: [PATCH 5/8] dwrite: Call RegEnumValueW with value and val_count parameters. Message-Id: <20150630153513.Horde.tDl1b0isJlFVkpsR4ZUX7TA@mail.elis.ugent.be> Date: Tue, 30 Jun 2015 15:35:13 +0200 Bernhard Übelacker wrote on Tue, 30 Jun 2015: > Bug #38796 > --- > dlls/dwrite/font.c | 28 +++++++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c > index 2091867..3e25992 100644 > --- a/dlls/dwrite/font.c > +++ b/dlls/dwrite/font.c > @@ -1845,8 +1845,8 @@ static ULONG WINAPI > systemfontfileenumerator_Release(IDWriteFontFileEnumerator * > static HRESULT WINAPI > systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFileEnumerator > *iface, IDWriteFontFile **file) > { > struct system_fontfile_enumerator *enumerator = > impl_from_IDWriteFontFileEnumerator(iface); > - DWORD ret, type, count; > - WCHAR *filename; > + DWORD ret, type, val_count, count; > + WCHAR *value, *filename; > HRESULT hr; > > *file = NULL; > @@ -1854,14 +1854,20 @@ static HRESULT WINAPI > systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil > if (enumerator->index < 0) > return E_FAIL; > > - if (RegEnumValueW(enumerator->hkey, enumerator->index, NULL, > NULL, NULL, &type, NULL, &count)) > + ret = RegQueryInfoKeyW(enumerator->hkey, NULL, NULL, NULL, > NULL, NULL, NULL, NULL, &val_count, &count, NULL, NULL); > + if (ret != ERROR_SUCCESS) > return E_FAIL; > > + val_count++; > + if (!(value = heap_alloc( val_count * sizeof(value[0]) ))) > + return E_OUTOFMEMORY; > + > if (!(filename = heap_alloc(count))) > return E_OUTOFMEMORY; This leaks value if the filename allocation fails. Jonas