Module: wine Branch: master Commit: d3308e6f09245e905d02de55f352855b561e3d0a URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3308e6f09245e905d02de55f3...
Author: Daniel Lehman dlehman@esri.com Date: Mon May 6 09:52:37 2013 -0700
wininet: Only accept proxy and proxy bypass if type is INTERNET_OPEN_TYPE_PROXY.
---
dlls/wininet/internet.c | 10 ++++++++-- dlls/wininet/tests/http.c | 10 +++++++++- 2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index b9f3e98..f8c36f7 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -1015,6 +1015,11 @@ HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, /* Clear any error information */ INTERNET_SetLastError(0);
+ if((dwAccessType == INTERNET_OPEN_TYPE_PROXY) && !lpszProxy) { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + lpwai = alloc_object(NULL, &APPINFOVtbl, sizeof(appinfo_t)); if (!lpwai) { SetLastError(ERROR_OUTOFMEMORY); @@ -1031,9 +1036,10 @@ HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, lpwai->agent = heap_strdupW(lpszAgent); if(dwAccessType == INTERNET_OPEN_TYPE_PRECONFIG) INTERNET_ConfigureProxy( lpwai ); - else + else if(dwAccessType == INTERNET_OPEN_TYPE_PROXY) { lpwai->proxy = heap_strdupW(lpszProxy); - lpwai->proxyBypass = heap_strdupW(lpszProxyBypass); + lpwai->proxyBypass = heap_strdupW(lpszProxyBypass); + }
TRACE("returning %p\n", lpwai);
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index 264aee7..bc3505f 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -2170,7 +2170,7 @@ out: static void test_proxy_direct(int port) { HINTERNET hi, hc, hr; - DWORD r, sz; + DWORD r, sz, error; char buffer[0x40], *url; WCHAR bufferW[0x40]; static CHAR username[] = "mike", @@ -2181,6 +2181,14 @@ static void test_proxy_direct(int port) passwordW[] = {'1','1','0','1',0}, useragentW[] = {'w','i','n','e','t','e','s','t',0};
+ /* specify proxy type without the proxy and bypass */ + SetLastError(0xdeadbeef); + hi = InternetOpen(NULL, INTERNET_OPEN_TYPE_PROXY, NULL, NULL, 0); + error = GetLastError(); + ok(error == ERROR_INVALID_PARAMETER || + broken(error == ERROR_SUCCESS) /* WinXPProSP2 */, "got %u\n", error); + ok(hi == NULL || broken(!!hi) /* WinXPProSP2 */, "open should have failed\n"); + sprintf(buffer, "localhost:%d\n", port); hi = InternetOpen(NULL, INTERNET_OPEN_TYPE_PROXY, buffer, NULL, 0); ok(hi != NULL, "open failed\n");