From e46f84a86b46e8c63a16302b667c7a38701a2937 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 25 Jun 2018 15:41:14 -0500 Subject: [PATCH] hnetcfg: Store the full path in INetFwAuthorizedApplication_put_ProcessImageFileName(). Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/hnetcfg/apps.c | 17 ++++++++++++----- dlls/hnetcfg/tests/policy.c | 5 ++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/dlls/hnetcfg/apps.c b/dlls/hnetcfg/apps.c index 34ef1080109..69eabd66c65 100644 --- a/dlls/hnetcfg/apps.c +++ b/dlls/hnetcfg/apps.c @@ -268,7 +268,7 @@ static HRESULT WINAPI fw_app_put_ProcessImageFileName( { fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); UNIVERSAL_NAME_INFOW *info; - WCHAR *netpath; + WCHAR *path; DWORD res; DWORD sz; @@ -281,22 +281,29 @@ static HRESULT WINAPI fw_app_put_ProcessImageFileName( res = WNetGetUniversalNameW(image, UNIVERSAL_NAME_INFO_LEVEL, NULL, &sz); if (res == WN_MORE_DATA) { - if (!(netpath = heap_alloc(sz))) + if (!(path = heap_alloc(sz))) return E_OUTOFMEMORY; - info = (UNIVERSAL_NAME_INFOW *)&netpath; + info = (UNIVERSAL_NAME_INFOW *)&path; res = WNetGetUniversalNameW(image, UNIVERSAL_NAME_INFO_LEVEL, &info, &sz); if (res == NO_ERROR) { SysFreeString(This->filename); This->filename = SysAllocString(info->lpUniversalName); } - heap_free(netpath); + heap_free(path); return HRESULT_FROM_WIN32(res); } + sz = GetFullPathNameW(image, 0, NULL, NULL); + if (!(path = heap_alloc(++sz * sizeof(WCHAR)))) + return E_OUTOFMEMORY; + + GetFullPathNameW(image, sz, path, NULL); + SysFreeString( This->filename ); - This->filename = SysAllocString(image); + This->filename = SysAllocString(path); + heap_free(path); return This->filename ? S_OK : E_OUTOFMEMORY; } diff --git a/dlls/hnetcfg/tests/policy.c b/dlls/hnetcfg/tests/policy.c index b28535d448d..389be1608c4 100644 --- a/dlls/hnetcfg/tests/policy.c +++ b/dlls/hnetcfg/tests/policy.c @@ -107,6 +107,7 @@ static void test_NetFwAuthorizedApplication(void) INetFwAuthorizedApplication *app; static WCHAR empty[] = {0}; UNIVERSAL_NAME_INFOW *info; + WCHAR fullpath[MAX_PATH]; WCHAR netpath[MAX_PATH]; WCHAR image[MAX_PATH]; HRESULT hr; @@ -138,13 +139,15 @@ static void test_NetFwAuthorizedApplication(void) ok(hr == S_OK, "got: %08x\n", hr); SysFreeString(bstr); + GetFullPathNameW(image, ARRAY_SIZE(fullpath), fullpath, NULL); + info = (UNIVERSAL_NAME_INFOW *)&netpath; sz = sizeof(netpath); hr = WNetGetUniversalNameW(image, UNIVERSAL_NAME_INFO_LEVEL, &info, &sz); if (hr != NO_ERROR) { info->lpUniversalName = netpath + sizeof(*info)/sizeof(WCHAR); - lstrcpyW(info->lpUniversalName, image); + lstrcpyW(info->lpUniversalName, fullpath); } hr = INetFwAuthorizedApplication_get_ProcessImageFileName(app, &bstr);