From 36649d083f6c85ecb5d2d79023893d1c8be93e51 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 29 Aug 2018 15:59:48 +0200 Subject: [PATCH] jsproxy: Fix parameters validation in InternetInitializeAutoProxyDll. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- dlls/jsproxy/main.c | 11 +++-------- dlls/jsproxy/tests/jsproxy.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/dlls/jsproxy/main.c b/dlls/jsproxy/main.c index d1ac903eb6f..26f43c506b2 100644 --- a/dlls/jsproxy/main.c +++ b/dlls/jsproxy/main.c @@ -179,20 +179,15 @@ BOOL WINAPI JSPROXY_InternetInitializeAutoProxyDll( DWORD version, LPSTR tmpfile if (buffer && buffer->dwStructSize == sizeof(*buffer) && buffer->lpszScriptBuffer) { - DWORD i, len = 0; - for (i = 0; i < buffer->dwScriptBufferSize; i++) - { - if (!buffer->lpszScriptBuffer[i]) break; - len++; - } - if (len == buffer->dwScriptBufferSize) + if (!buffer->dwScriptBufferSize) { SetLastError( ERROR_INVALID_PARAMETER ); LeaveCriticalSection( &cs_jsproxy ); return FALSE; } heap_free( global_script->text ); - if ((global_script->text = strdupAW( buffer->lpszScriptBuffer, len ))) ret = TRUE; + if ((global_script->text = strdupAW( buffer->lpszScriptBuffer, + buffer->dwScriptBufferSize ))) ret = TRUE; } else { diff --git a/dlls/jsproxy/tests/jsproxy.c b/dlls/jsproxy/tests/jsproxy.c index 67a29881734..d1c905c2e99 100644 --- a/dlls/jsproxy/tests/jsproxy.c +++ b/dlls/jsproxy/tests/jsproxy.c @@ -24,6 +24,8 @@ #include "wine/test.h" +static BOOL old_jsproxy; + static BOOL (WINAPI *pInternetInitializeAutoProxyDll) (DWORD, LPSTR, LPSTR, AutoProxyHelperFunctions *, AUTO_PROXY_SCRIPT_BUFFER *); static BOOL (WINAPI *pInternetDeInitializeAutoProxyDll)(LPSTR, DWORD); @@ -34,6 +36,7 @@ static void test_InternetInitializeAutoProxyDll(void) const char url[] = "http://localhost"; char script[] = "function FindProxyForURL(url, host) {return \"DIRECT\";}\0test"; char script2[] = "function FindProxyForURL(url, host) {return \"PROXY 10.0.0.1:8080\";}\0test"; + char script3[] = "function FindProxyForURL(url, host) {return \"DIRECT\";}"; char *proxy, host[] = "localhost"; AUTO_PROXY_SCRIPT_BUFFER buf; DWORD err, len; @@ -76,6 +79,16 @@ static void test_InternetInitializeAutoProxyDll(void) ok( !strcmp( proxy, "PROXY 10.0.0.1:8080" ), "got \"%s\"\n", proxy ); GlobalFree( proxy ); + buf.lpszScriptBuffer = script3; + buf.dwScriptBufferSize = strlen(script3); + ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); + ok( ret || broken(old_jsproxy && !ret), "got %u\n", GetLastError() ); + + buf.dwScriptBufferSize = 1; + script3[0] = 0; + ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); + ok( ret, "got %u\n", GetLastError() ); + ret = pInternetDeInitializeAutoProxyDll( NULL, 0 ); ok( ret, "got %u\n", GetLastError() ); } @@ -150,6 +163,10 @@ START_TEST(jsproxy) return; } + old_jsproxy = !GetProcAddress( module, "InternetGetProxyInfoEx" ); + if (old_jsproxy) + trace( "InternetGetProxyInfoEx not available\n" ); + test_InternetInitializeAutoProxyDll(); test_InternetGetProxyInfo(); }