wininet: Handle http_proxy variable entirely in Unicode.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Alexandre Julliard 2019-11-28 08:49:07 +01:00
parent 86f43b693a
commit cadad89d10
1 changed files with 7 additions and 19 deletions

View File

@ -541,7 +541,7 @@ static LONG INTERNET_LoadProxySettings( proxyinfo_t *lpwpi )
{ {
HKEY key; HKEY key;
DWORD type, len; DWORD type, len;
LPCSTR envproxy; const WCHAR *envproxy;
LONG ret; LONG ret;
memset( lpwpi, 0, sizeof(*lpwpi) ); memset( lpwpi, 0, sizeof(*lpwpi) );
@ -573,7 +573,7 @@ static LONG INTERNET_LoadProxySettings( proxyinfo_t *lpwpi )
} }
} }
if (!(envproxy = getenv( "http_proxy" )) || lpwpi->proxyEnabled) if (!(envproxy = _wgetenv( L"http_proxy" )) || lpwpi->proxyEnabled)
{ {
/* figure out how much memory the proxy setting takes */ /* figure out how much memory the proxy setting takes */
if (!RegQueryValueExW( key, szProxyServer, NULL, &type, NULL, &len ) && len && (type == REG_SZ)) if (!RegQueryValueExW( key, szProxyServer, NULL, &type, NULL, &len ) && len && (type == REG_SZ))
@ -615,18 +615,8 @@ static LONG INTERNET_LoadProxySettings( proxyinfo_t *lpwpi )
} }
else if (envproxy) else if (envproxy)
{ {
WCHAR *envproxyW;
len = MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, NULL, 0 );
if (!(envproxyW = heap_alloc(len * sizeof(WCHAR))))
{
RegCloseKey( key );
return ERROR_OUTOFMEMORY;
}
MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, envproxyW, len );
FreeProxyInfo( lpwpi ); FreeProxyInfo( lpwpi );
if (parse_proxy_url( lpwpi, envproxyW )) if (parse_proxy_url( lpwpi, envproxy ))
{ {
TRACE("http proxy (from environment) = %s\n", debugstr_w(lpwpi->proxy)); TRACE("http proxy (from environment) = %s\n", debugstr_w(lpwpi->proxy));
lpwpi->proxyEnabled = 1; lpwpi->proxyEnabled = 1;
@ -634,19 +624,18 @@ static LONG INTERNET_LoadProxySettings( proxyinfo_t *lpwpi )
} }
else else
{ {
WARN("failed to parse http_proxy value %s\n", debugstr_w(envproxyW)); WARN("failed to parse http_proxy value %s\n", debugstr_w(envproxy));
lpwpi->proxyEnabled = 0; lpwpi->proxyEnabled = 0;
lpwpi->proxy = NULL; lpwpi->proxy = NULL;
lpwpi->proxyBypass = NULL; lpwpi->proxyBypass = NULL;
} }
heap_free( envproxyW );
} }
if (lpwpi->proxyEnabled) if (lpwpi->proxyEnabled)
{ {
TRACE("Proxy is enabled.\n"); TRACE("Proxy is enabled.\n");
if (!(envproxy = getenv( "no_proxy" ))) if (!(envproxy = _wgetenv( L"no_proxy" )))
{ {
/* figure out how much memory the proxy setting takes */ /* figure out how much memory the proxy setting takes */
if (!RegQueryValueExW( key, szProxyOverride, NULL, &type, NULL, &len ) && len && (type == REG_SZ)) if (!RegQueryValueExW( key, szProxyOverride, NULL, &type, NULL, &len ) && len && (type == REG_SZ))
@ -677,13 +666,12 @@ static LONG INTERNET_LoadProxySettings( proxyinfo_t *lpwpi )
{ {
WCHAR *envproxyW; WCHAR *envproxyW;
len = MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, NULL, 0 ); if (!(envproxyW = heap_alloc(lstrlenW(envproxy) * sizeof(WCHAR))))
if (!(envproxyW = heap_alloc(len * sizeof(WCHAR))))
{ {
RegCloseKey( key ); RegCloseKey( key );
return ERROR_OUTOFMEMORY; return ERROR_OUTOFMEMORY;
} }
MultiByteToWideChar( CP_UNIXCP, 0, envproxy, -1, envproxyW, len ); lstrcpyW( envproxyW, envproxy );
heap_free( lpwpi->proxyBypass ); heap_free( lpwpi->proxyBypass );
lpwpi->proxyBypass = envproxyW; lpwpi->proxyBypass = envproxyW;