Robert Shearman : wininet: Fix an off-by-one error in InternetCreateUrlW.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 9 16:06:17 CST 2006


Module: wine
Branch: refs/heads/master
Commit: e4adc07333da62a6498e9c0e95fbb2dc2ff58f50
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=e4adc07333da62a6498e9c0e95fbb2dc2ff58f50

Author: Robert Shearman <rob at codeweavers.com>
Date:   Thu Mar  9 15:19:46 2006 +0000

wininet: Fix an off-by-one error in InternetCreateUrlW.

Fix an off-by-one error in the size of buffer used to store the port
number in InternetCreateUrlW.

---

 dlls/wininet/internet.c   |    4 ++--
 dlls/wininet/tests/http.c |   19 ++++++++++++++++++-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index e06c306..503c271 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -3786,7 +3786,7 @@ static BOOL calc_url_length(LPURL_COMPON
 
         if (!url_uses_default_port(nScheme, lpUrlComponents->nPort))
         {
-            char szPort[MAX_WORD_DIGITS];
+            char szPort[MAX_WORD_DIGITS+1];
 
             sprintf(szPort, "%d", lpUrlComponents->nPort);
             *lpdwUrlLength += strlen(szPort);
@@ -4021,7 +4021,7 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM
 
         if (!url_uses_default_port(nScheme, lpUrlComponents->nPort))
         {
-            WCHAR szPort[MAX_WORD_DIGITS];
+            WCHAR szPort[MAX_WORD_DIGITS+1];
 
             sprintfW(szPort, percentD, lpUrlComponents->nPort);
             *lpszUrl = ':';
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index a202268..3f512cf 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -50,6 +50,7 @@
 #define CREATE_URL9 "about:blank"
 #define CREATE_URL10 "about://host/blank"
 #define CREATE_URL11 "about:"
+#define CREATE_URL12 "http://www.winehq.org:65535"
 
 static HANDLE hCompleteEvent;
 
@@ -1140,7 +1141,6 @@ static void InternetCreateUrlA_test(void
 	urlComp.nPort = 8080;
 	urlComp.lpszScheme = "about";
 	len = strlen(CREATE_URL11);
-	len++; /* work around bug in native wininet */
 	szUrl = (char *)HeapAlloc(GetProcessHeap(), 0, ++len);
 	ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
 	ok(ret, "Expected success\n");
@@ -1148,6 +1148,23 @@ static void InternetCreateUrlA_test(void
 	ok(!strcmp(szUrl, CREATE_URL11), "Expected %s, got %s\n", CREATE_URL11, szUrl);
 
 	HeapFree(GetProcessHeap(), 0, szUrl);
+
+	memset(&urlComp, 0, sizeof(urlComp));
+	urlComp.dwStructSize = sizeof(URL_COMPONENTS);
+	urlComp.lpszScheme = "http";
+	urlComp.dwSchemeLength = 0;
+	urlComp.nScheme = INTERNET_SCHEME_HTTP;
+	urlComp.lpszHostName = "www.winehq.org";
+	urlComp.dwHostNameLength = 0;
+	urlComp.nPort = 65535;
+	len = strlen(CREATE_URL12);
+	szUrl = (char *)HeapAlloc(GetProcessHeap(), 0, ++len);
+	ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
+	ok(ret, "Expected success\n");
+	ok(len == strlen(CREATE_URL12), "Expected len %d, got %ld\n", strlen(CREATE_URL12), len);
+	ok(!strcmp(szUrl, CREATE_URL12), "Expected %s, got %s\n", CREATE_URL12, szUrl);
+
+	HeapFree(GetProcessHeap(), 0, szUrl);
 }
 
 static void HttpSendRequestEx_test(void)




More information about the wine-cvs mailing list