[APPHELP] Dereference after null check (default_dir). CID 1363509

svn path=/trunk/; revision=71931
This commit is contained in:
Mark Jansen 2016-07-13 18:02:16 +00:00
parent 02da519230
commit 3fe36f5bb9

View file

@ -472,31 +472,36 @@ BOOL WINAPI SdbGetAppPatchDir(HSDB db, LPWSTR path, DWORD size)
static WCHAR* default_dir = NULL; static WCHAR* default_dir = NULL;
static CONST WCHAR szAppPatch[] = {'\\','A','p','p','P','a','t','c','h',0}; static CONST WCHAR szAppPatch[] = {'\\','A','p','p','P','a','t','c','h',0};
if(!default_dir) /* In case function fails, path holds empty string */
if (size > 0)
*path = 0;
if (!default_dir)
{ {
WCHAR* tmp = NULL; WCHAR* tmp = NULL;
UINT len = GetSystemWindowsDirectoryW(NULL, 0) + lstrlenW(szAppPatch); UINT len = GetSystemWindowsDirectoryW(NULL, 0) + lstrlenW(szAppPatch);
tmp = SdbAlloc((len + 1)* sizeof(WCHAR)); tmp = SdbAlloc((len + 1)* sizeof(WCHAR));
if(tmp) if (tmp)
{ {
UINT r = GetSystemWindowsDirectoryW(tmp, len+1); UINT r = GetSystemWindowsDirectoryW(tmp, len+1);
if (r && r < len) if (r && r < len)
{ {
if (SUCCEEDED(StringCchCatW(tmp, len+1, szAppPatch))) if (SUCCEEDED(StringCchCatW(tmp, len+1, szAppPatch)))
{ {
if(InterlockedCompareExchangePointer((void**)&default_dir, tmp, NULL) == NULL) if (InterlockedCompareExchangePointer((void**)&default_dir, tmp, NULL) == NULL)
tmp = NULL; tmp = NULL;
} }
} }
if (tmp) if (tmp)
SdbFree(tmp); SdbFree(tmp);
} }
if (!default_dir)
{
SHIM_ERR("Unable to obtain default AppPatch directory\n");
return FALSE;
}
} }
/* In case function fails, path holds empty string */
if (size > 0)
*path = 0;
if (!db) if (!db)
{ {
return SUCCEEDED(StringCchCopyW(path, size, default_dir)); return SUCCEEDED(StringCchCopyW(path, size, default_dir));