On 20.07.2015 12:53, Alistair Leslie-Hughes wrote:
else
{
WCHAR name[MAX_PATH];
DWORD index = 0;
DWORD namelen;
usedefault = FALSE;
memset(buff, 0, buff_len);
namelen = sizeof(name);
while (RegEnumValueW(sectionkey, index, name, &namelen, NULL, NULL, NULL, NULL ) == ERROR_SUCCESS)
{
lstrcpyW(buff+ret, name);
ret += namelen+1;
namelen = sizeof(name);
index++;
}
}
In this new case you unconditionally write to 'buff' without checking if you already exceeded 'buff_len'. Also memset of whole buffer looks suspicious and I don't see anything in tests that proves it.