Module: wine Branch: master Commit: 36649d083f6c85ecb5d2d79023893d1c8be93e51 URL: https://source.winehq.org/git/wine.git/?a=commit;h=36649d083f6c85ecb5d2d7902...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Aug 29 15:59:48 2018 +0200
jsproxy: Fix parameters validation in InternetInitializeAutoProxyDll.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 d1ac903..26f43c5 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 67a2988..d1c905c 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(); }