Module: wine Branch: refs/heads/master Commit: e4adc07333da62a6498e9c0e95fbb2dc2ff58f50 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e4adc07333da62a6498e9c0e...
Author: Robert Shearman rob@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)