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