shlwapi: Don't attempt to un-expand ComputerName in PathUnExpandEnvStrings.

Signed-off-by: Thomas Faber <thomas.faber@reactos.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Katayama Hirofumi MZ 2018-02-23 18:33:12 +01:00 committed by Alexandre Julliard
parent fb6b3cc872
commit 7be8beab68
2 changed files with 16 additions and 4 deletions

View File

@ -4105,7 +4105,6 @@ BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR path, LPSTR buffer, UINT buf_len)
static const WCHAR allusersprofileW[] = {'%','A','L','L','U','S','E','R','S','P','R','O','F','I','L','E','%',0}; static const WCHAR allusersprofileW[] = {'%','A','L','L','U','S','E','R','S','P','R','O','F','I','L','E','%',0};
static const WCHAR appdataW[] = {'%','A','P','P','D','A','T','A','%',0}; static const WCHAR appdataW[] = {'%','A','P','P','D','A','T','A','%',0};
static const WCHAR computernameW[] = {'%','C','O','M','P','U','T','E','R','N','A','M','E','%',0};
static const WCHAR programfilesW[] = {'%','P','r','o','g','r','a','m','F','i','l','e','s','%',0}; static const WCHAR programfilesW[] = {'%','P','r','o','g','r','a','m','F','i','l','e','s','%',0};
static const WCHAR systemrootW[] = {'%','S','y','s','t','e','m','R','o','o','t','%',0}; static const WCHAR systemrootW[] = {'%','S','y','s','t','e','m','R','o','o','t','%',0};
static const WCHAR systemdriveW[] = {'%','S','y','s','t','e','m','D','r','i','v','e','%',0}; static const WCHAR systemdriveW[] = {'%','S','y','s','t','e','m','D','r','i','v','e','%',0};
@ -4142,7 +4141,6 @@ BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR path, LPWSTR buffer, UINT buf_len)
struct envvars_map envvars[] = { struct envvars_map envvars[] = {
{ allusersprofileW, sizeof(allusersprofileW)/sizeof(WCHAR) }, { allusersprofileW, sizeof(allusersprofileW)/sizeof(WCHAR) },
{ appdataW, sizeof(appdataW)/sizeof(WCHAR) }, { appdataW, sizeof(appdataW)/sizeof(WCHAR) },
{ computernameW, sizeof(computernameW)/sizeof(WCHAR) },
{ programfilesW, sizeof(programfilesW)/sizeof(WCHAR) }, { programfilesW, sizeof(programfilesW)/sizeof(WCHAR) },
{ systemrootW, sizeof(systemrootW)/sizeof(WCHAR) }, { systemrootW, sizeof(systemrootW)/sizeof(WCHAR) },
{ systemdriveW, sizeof(systemdriveW)/sizeof(WCHAR) }, { systemdriveW, sizeof(systemdriveW)/sizeof(WCHAR) },

View File

@ -1463,10 +1463,11 @@ static void test_PathUnExpandEnvStrings(void)
static const WCHAR sysrootW[] = {'%','S','y','s','t','e','m','R','o','o','t','%',0}; static const WCHAR sysrootW[] = {'%','S','y','s','t','e','m','R','o','o','t','%',0};
static const WCHAR sysdriveW[] = {'%','S','y','s','t','e','m','D','r','i','v','e','%',0}; static const WCHAR sysdriveW[] = {'%','S','y','s','t','e','m','D','r','i','v','e','%',0};
static const WCHAR nonpathW[] = {'p','a','t','h',0}; static const WCHAR nonpathW[] = {'p','a','t','h',0};
static const WCHAR computernameW[] = {'C','O','M','P','U','T','E','R','N','A','M','E',0};
static const char sysrootA[] = "%SystemRoot%"; static const char sysrootA[] = "%SystemRoot%";
static const char sysdriveA[] = "%SystemDrive%"; static const char sysdriveA[] = "%SystemDrive%";
WCHAR pathW[MAX_PATH], buffW[MAX_PATH], sysdrvW[3]; WCHAR pathW[MAX_PATH], buffW[MAX_PATH], sysdrvW[3], envvarW[30];
char path[MAX_PATH], buff[MAX_PATH], sysdrvA[3], envvarA[10]; char path[MAX_PATH], buff[MAX_PATH], sysdrvA[3], envvarA[30];
BOOL ret; BOOL ret;
UINT len; UINT len;
@ -1476,6 +1477,19 @@ static void test_PathUnExpandEnvStrings(void)
return; return;
} }
/* The value of ComputerName is not a path */
ret = GetEnvironmentVariableA("COMPUTERNAME", envvarA, sizeof(envvarA));
ok(ret, "got %d\n", ret);
SetLastError(0xdeadbeef);
ret = pPathUnExpandEnvStringsA(envvarA, buff, sizeof(buff));
ok(!ret && GetLastError() == 0xdeadbeef, "got %d, error %d\n", ret, GetLastError());
ret = GetEnvironmentVariableW(computernameW, envvarW, sizeof(envvarW)/sizeof(WCHAR));
ok(ret, "got %d\n", ret);
SetLastError(0xdeadbeef);
ret = pPathUnExpandEnvStringsW(envvarW, buffW, sizeof(buffW)/sizeof(WCHAR));
ok(!ret && GetLastError() == 0xdeadbeef, "got %d, error %d\n", ret, GetLastError());
/* something that can't be represented with env var */ /* something that can't be represented with env var */
strcpy(path, "somepath_name"); strcpy(path, "somepath_name");
strcpy(buff, "xx"); strcpy(buff, "xx");