mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 17:05:45 +00:00
[APPHELP] Dereference after null check (default_dir). CID 1363509
svn path=/trunk/; revision=71931
This commit is contained in:
parent
02da519230
commit
3fe36f5bb9
1 changed files with 12 additions and 7 deletions
|
@ -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));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue