Piotr Caban : jsproxy: Fix parameters validation in InternetInitializeAutoProxyDll.
Alexandre Julliard
julliard at winehq.org
Thu Aug 30 16:34:42 CDT 2018
Module: wine
Branch: master
Commit: 36649d083f6c85ecb5d2d79023893d1c8be93e51
URL: https://source.winehq.org/git/wine.git/?a=commit;h=36649d083f6c85ecb5d2d79023893d1c8be93e51
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Aug 29 15:59:48 2018 +0200
jsproxy: Fix parameters validation in InternetInitializeAutoProxyDll.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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();
}
More information about the wine-cvs
mailing list